2

要件 - asp.net MVCアプリケーションからAzure SQL DBに接続しようとしましたが、Azure SQL DBへの接続タイプは "トークンベース"以下は私の最後からのセットアップです。SQL AADトークンベースの認証 - NT AUTHORITY ANONYMOUS LOGONのログインに失敗しました

a。証明書ベースの認証でAADアプリケーション(例:MTSLocal)を作成しました。

b。上記のAADにSQLの権限を追加しました。

CREATE USER [MTSLocal] FROM外部プロバイダ。

c.InコードレベルクライアントID(手順aから取得)を使用してアクセストークンを取得しようとしています。証明書と接続先のリソースが「https://database.windows.net」です。サンプルコードを参照してください -

string authority = string.Format(System.Globalization.CultureInfo.InvariantCulture, "https://login.windows.net/{0}", 
       "xxxx.onmicrosoft.com"); 
      var authContext = new AuthenticationContext(authority);   
      AuthenticationResult result = null; 
      result = await authContext.AcquireTokenAsync("https://database.windows.net", AssertionCert); 
      token = result.AccessToken; 

d。私はアクセストークンを取得することができますが、私はSQL接続をオープンしようとしています。上記のエラーが発生しています。

 sqlBuilder["Data Source"] = serverName; 
     sqlBuilder["Initial Catalog"] = databaseName; 
     sqlBuilder["Connect Timeout"] = 30; 

     string accesstoken = GetAccessToken(); 

     using (SqlConnection connection = new SqlConnection(sqlBuilder.ConnectionString)) 
     { 
      try 
      { 
       connection.AccessToken = accesstoken; 
       connection.Open(); 
      } 
      catch (Exception ex) 
      { 

      } 
     } 

これについての助けがあれば、本当に役に立ちます。

+0

あなたがこれをやっている方法に関するいくつかのコードやその他の情報を見ずに誰でもあなたに有意義に答えるのは簡単ではありません。あなたの質問に何を入れるべきかについては、https://stackoverflow.com/help/how-to-askを参照してください。 – ADyson

+0

申し訳ありません..私はコードサンプルを使用しました - https://stackoverflow.com/questions/38862095/acquiring-azure-ad-token-for-azure-sql-server しかし、connection.open()の行私は上記の例外を上回っています。 connection.AccessToken = accessToken; //アクセストークンを正常に取得できます。 connection.Open(); –

+0

アーキテクチャをより具体的に記述してください。クライアント、Azure DC、SQLサーバ、およびSQLサーバの前にある任意のウェブサーバまたは他のタイプのアプリケーションサーバを含む。 –

答えて

-1

AADに登録されているアプリケーションは、DBのユーザーリストに追加する必要があり、それぞれの役割はDB USERに渡す必要があります。

登録されているAppの名前が「App_AAD_Register_Name」であるとします。以下のクエリを実行するのと同じように、このユーザを対応するDBに追加してください。これにより、ユーザーはDBサーバーのプリンシパルユーザーリストに追加されます。

CREATE USER [App_AAD_Register_Name]から外部プロバイダを作成します。

[RoleUser] [RoleUser] GO

TO SCHEMA :: DBO ON GRANTのINSERTに行く GRANT SELECT ON SCHEMA :: DBOをGO [RoleUser] ROLEをCREATE

以下のようないくつかの一般的な役割を作成します。

ロールが作成され、それぞれの権限が与えられたら、最初の手順で作成したユーザーにロールを割り当てます。

EXEC sp_addrolemember N'RoleUser '、N'App_AAD_Register_Name'。

これらの手順がすべて完了すると、トークンを使用してDBに接続できます。

これらの手順は私には役立ちました。

関連する問題