2017-11-11 24 views
0

私はMSALを使用してIDトークンを取得しています。これを使用してWeb APIアプリケーションにアクセスします。私はいくつかの質問があり、誰かが何が起こっているのか理解するのを助けることができるかどうか疑問に思っていました。MSALとAzure AD:ユーザーIDを取得したいとき、どのスコープを渡す必要がありますか?

クライアント側の認証プロセスから始めましょう。この場合、現在のユーザーを認証するために次のコードを使用しているWindowsフォームアプリケーションを構築しています(つまり、ユーザーがWebにアクセスしようとしたときにユーザーを検証するために使用されるIDトークンを取得するため) APIアプリ):

//constructor code 
_clientApp = new PublicClientApplication(ClientId, 
        Authority, //which url here? 
        TokenCacheHelper.GetUserCache()); 
_scopes = new []{ "user.read" }; //what to put here? 

//inside a helper method 
try { 
     return await _clientApp.AcquireTokenSilentAsync(_scopes, _clientApp.Users.FirstOrDefault()); 
} 
catch (MsalUiRequiredException ex) { 
    try { 
      return await _clientApp.AcquireTokenAsync(_scopes); 
     } 
     catch (MsalException ex) { 
      return null; 
     } 
} 

まず、権限パラメータに使用する値を指定します。この場合、私は、フォーム上のURLを使用しています:

https://login.microsoftonline.com/{Tenant}/oauth2/v2.0/token 

しかし、私はまた、このような何かを離れて得ることができる印象の下だ:

https://login.microsoftonline.com/common/v2.0/.well-known/openid-configuration

それを1つのエンドポイントが私のAzure広告に固有のものであるのに対し、他のものは一般的な(すべてをキャッチした)URLのように見えます...これらのエンドポイントについての詳しい情報と、それぞれの目的はどこにありますか...

もう一つ私がかなり理解できなかったのは範囲です。私はMS Graph(またはその問題に関して他のAzure関連サービス)に問い合わせることには興味がありません。以前のバージョンのMSALライブラリでは、デフォルトのスコープの1つを参照することができました。しかし、それはもはや可能ではないようです(少なくとも、私はデフォルトのスコープを渡すべきではないと言って例外を試しました...)。

空のコレクション(例:new List<string>())またはnullを渡すとエラーになります。だから、この場合、私はuser.readスコープ(私は誤解されていない場合は、MS Graph APIで使用されています。これは明らかに必要ではありませんが、私は認証を得るために管理した唯一の方法でしたIDトークンを取得する必要があるときに呼び出しを実行する手掛かりがありますか?別のメソッドを呼び出す必要がありますか?

サーバー側に移動すると、認証ヘッダー(無記名)でIDトークンを渡す呼び出しに制限され、このsampleによると、私はこのようなものを使用する必要があります。さて、これが作業を行い、それがドンすべてのリクエストに対して401を返します

private void ConfigureAuth(IAppBuilder app) { 
    var authority = "https://login.microsoftonline.com/common/v2.0/.well-known/openid-configuration"; 
    app.UseOAuthBearerAuthentication(
     new OAuthBearerAuthenticationOptions { 
      AccessTokenFormat = new JwtFormat(GetTokenValidationParameters(), 
        new OpenIdConnectCachingSecurityTokenProvider(authority)), 
              Provider = new OAuthBearerAuthenticationProvider { 
                OnValidateIdentity = ValidateIdentity 
              } 
              }); 
} 

をVAを持っている蓋IDトークン。しかし、1つの質問があります:ユーザー名(コントローラのUser.Identity.Name)を識別するために使用すべきTicket Identityからのクレームを指定する方法はありますか?あなたが見ることができるように

private Task ValidateIdentity(OAuthValidateIdentityContext arg) { 
    //username not getting correctly filled 
    //so, i'm handling this event in order to set it up 
    //from the preferred_username claim 
    if (!arg.HasError && arg.IsValidated) { 
     var identity = arg.Ticket.Identity; 
     var username = identity.Claims.FirstOrDefault(c => c.Type == "preferred_username")?.Value ?? ""; 
     if (!string.IsNullOrEmpty(username)) { 
      identity.AddClaim(new Claim(ClaimTypes.Name, username)); 
     } 
    } 
    return Task.CompletedTask; 
} 

、私がいたIDトークン(からpreferred_username請求を探しています:この場合、私はこのようなコードでそれを行うためにOnValidateIdentityを処理終了しましたその値を使ってNameの要求を設定します。私にこれを自動的にさせるオプションはありますか? OAuthBearerAuthenticationMiddlewareの設定で何か不足していますか?あなたのまずクエリについて

答えて

0

- 私は、これらのエンドポイントについて、それぞれの目的何についての詳細な情報を見つけることができます ...

    : -

    回答 https://login.microsoftonline.com/{テナント} /v2.0/.well-known/openid-configuration

    {テナント}は、4つの値のいずれかを取ることができ

  1. 共通 - マイクロソフトの個人アカウントと職場または学校の両方のアカウントを持つユーザーf rom Azure Active Directory(Azure AD)は、アプリケーションにサインインできます。

  2. 組織- Azure ADの職場または学校のアカウントを持つユーザーのみがアプリケーションにサインインできます。

  3. コンシューマ - 個人的なマイクロソフトアカウントを持つユーザーのみ、アプリケーションにサインインできます。

  4. 8eaef023-2b34-4da1-9baa-8bc8c9d6a490またはcontoso.onmicrosoft.com - 特定のAzure ADテナントからの仕事や学校のアカウントを持つユーザーのみが は、アプリケーションにサインインすることができます。 Azure ADテナントのフレンドリドメイン名またはテナントのGUID識別子のいずれかを使用できます。あなたの第二クエリの範囲については

-

回答 - このドキュメントを参照してください - あなたのサードクエリ上の請求についてはOpenID Connect scopes

-

回答 - このGITハブのサンプルを参照 - active-directory-dotnet-webapp-roleclaims

+0

こんにちはMohit。 1が助けになりました。 2、実際にはありません。たとえば、それらのスコープの一部はデフォルトで送信され、私が言ったように、スコープコレクションで再利用することはできません。 3に関して、私は答えを見つけました:https://github.com/AzureAD/azure-activedirectory-identitymodel-extensions-for-dotnet/blob/f10a045459e7cb07548806561a47ecdb3471f5f6/src/Microsoft.IdentityModel.Tokens/TokenValidationParameters.cs#L413 –

関連する問題