Azure ActiveDirectory-アクセストークンを保存するためのMVCアプリケーションのベストプラクティス

トーマス

Azure Active Directory(AAD)を使用して単純なMVCアプリケーションをセットアップしました。

アプリケーションからアプリケーションのロールとグループを管理するには、AAD GraphAPIにクエリを実行する必要があります。

ではStartup、クラス、私はそのようなAccessTokenを受けました:

public void ConfigureAuth(IAppBuilder app)
{
    AntiForgeryConfig.UniqueClaimTypeIdentifier = ClaimTypes.NameIdentifier;

    app.SetDefaultSignInAsAuthenticationType(CookieAuthenticationDefaults.AuthenticationType);

    app.UseCookieAuthentication(new CookieAuthenticationOptions());

    app.UseOpenIdConnectAuthentication(
        new OpenIdConnectAuthenticationOptions
        {
            ClientId = Constants.ClientId,
            Authority = Constants.Authority,
            PostLogoutRedirectUri = Constants.PostLogoutRedirectUri,
            Notifications = new OpenIdConnectAuthenticationNotifications()
            {
                // If there is a code in the OpenID Connect response, redeem it for an access token and refresh token, and store those away.
                AuthorizationCodeReceived = (context) =>
                {
                    var code = context.Code;
                    var credential = new ClientCredential(Constants.ClientId, Constants.ClientSecret);
                    var signedInUserId =
                        context.AuthenticationTicket.Identity.FindFirst(ClaimTypes.NameIdentifier).Value;
                    var authContext = new AuthenticationContext(Constants.Authority,
                        new TokenDbCache(signedInUserId));
                    var result = authContext.AcquireTokenByAuthorizationCode(
                        code, new Uri(HttpContext.Current.Request.Url.GetLeftPart(UriPartial.Path)), credential,
                        Constants.GraphUrl);

                    var accessToken = result.AccessToken;                        
                    return Task.FromResult(0);
                }
            }
        });
}

ActiveDirectoryClientクラスをインスタンス化するには、AccessTokenを渡す必要があります。

var servicePointUri = new Uri("https://graph.windows.net");
var serviceRoot = new Uri(servicePointUri, tenantID);
var activeDirectoryClient = new ActiveDirectoryClient(serviceRoot,
        async () => await GetTokenForApplication());

AccessTokenをクレームとして保存することが良い解決策(Startupクラスに追加する行)であるかどうか疑問に思っていますか?

context.AuthenticationTicket.Identity.AddClaim(new 
    Claim("OpenId_AccessToken", result.AccessToken));

EDITトークンはすでに保存されています。

それを得る !!!ジョージありがとう。そのため、私のトークンはTokenDbCacheクラスを使用してデータベースに保存されています

サンプルに従って(私のコントローラーの1つで)それを再び取得するには:

public async Task<string> GetTokenForApplication()
{
    string signedInUserID = ClaimsPrincipal.Current.FindFirst(ClaimTypes.NameIdentifier).Value;
    string tenantID = ClaimsPrincipal.Current.FindFirst("http://schemas.microsoft.com/identity/claims/tenantid").Value;
    string userObjectID = ClaimsPrincipal.Current.FindFirst("http://schemas.microsoft.com/identity/claims/objectidentifier").Value;

    // get a token for the Graph without triggering any user interaction (from the cache, via multi-resource refresh token, etc)
    ClientCredential clientcred = new ClientCredential(clientId, appKey);
    // initialize AuthenticationContext with the token cache of the currently signed in user, as kept in the app's database
    AuthenticationContext authenticationContext = new AuthenticationContext(aadInstance + tenantID, new TokenDbCache<ApplicationDbContext>(signedInUserID));
    AuthenticationResult authenticationResult = await authenticationContext.AcquireTokenSilentAsync(graphResourceID, clientcred, new UserIdentifier(userObjectID, UserIdentifierType.UniqueId));
    return authenticationResult.AccessToken;
}

から私が知らないことAuthenticationContext:トークンがすでに要求されている場合、トークンはから取得しますTokenDbCache

ジョージトリフォノフ

Adalを介してトークンを取得する場合、トークンはNaiveCacheオブジェクトにキャッシュされます。

StartUpクラスでトークンを取得するコード:

  AuthenticationResult kdAPiresult = authContext.AcquireTokenByAuthorizationCode(code, new Uri(HttpContext.Current.Request.Url.GetLeftPart(UriPartial.Path)), credential, "Your API Resource ID");
                            string kdAccessToken = kdAPiresult.AccessToken;

Azure Active Directoryサンプル(https://github.com/AzureADSamples)では、このオブジェクトを使用してアプリコントローラー内のトークンを取得しました。独自のキャッシュを実装して、同じ方法でキャッシュを取得できます。

コントローラコードでは、次のことができます。

IOwinContext owinContext = HttpContext.GetOwinContext();
                string userObjectID = owinContext.Authentication.User.Claims.First(c => c.Type == Configuration.ClaimsObjectidentifier).Value;
                NaiveSessionCache cache = new NaiveSessionCache(userObjectID);
                AuthenticationContext authContext = new AuthenticationContext(Configuration.Authority, cache);
                TokenCacheItem kdAPITokenCache = authContext.TokenCache.ReadItems().Where(c => c.Resource == "You API Resource ID").FirstOrDefault();

AuthenticationContext(サードパーティAPI)を介さずにトークンを取得している場合は、クレームにトークンを保存することもできます

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Azure ActiveDirectoryを使用してServiceFabricアプリケーションのKeyVaultにアクセスする

分類Dev

Azure ActiveDirectoryでアプリケーションごとにアクセス許可をスコープする方法

分類Dev

Azure ActiveDirectory内のアプリケーション間のアクセスを構成できません

分類Dev

あるAzureActive Directoryからユーザーを追加して、別のAzure ActiveDirectory内のアプリケーションにアクセスする

分類Dev

Azure ActiveDirectoryアプリへのアクセスを特定のテナントに制限する

分類Dev

デバイスコードを使用して、Azure ActiveDirectoryに対してPythonアプリケーションをインタラクティブに認証する

分類Dev

Azure ActiveDirectoryを介して複数の保護されたWebAPIにアクセスするためのAngularシングルページアプリケーション

分類Dev

Azure ActiveDirectoryを使用して外部アプリケーションのクライアント資格情報フローを設定する方法

分類Dev

Azure ActiveDirectoryからアプリケーションに付与されたアクセス許可を取り消すことはできません

分類Dev

Azure ActiveDirectoryの役割

分類Dev

Azure ActiveDirectoryアプリケーションキーの更新

分類Dev

Azure ActiveDirectoryはAzureの外部のWebApiでアクセストークンを確認します

分類Dev

Azure ActiveDirectoryアプリケーションとサービスのプリンシパル

分類Dev

Azure ActiveDirectoryのアクセストークンとシングルサインオン

分類Dev

Azure ActiveDirectoryユーザーに特定のアプリサービスアクセスを割り当てる

分類Dev

Azure ActiveDirectoryグループによるアプリケーションの要求

分類Dev

Azure ActiveDirectoryを使用して他のサービスにアクセスする

分類Dev

Azure ActiveDirectoryクライアントの資格情報フロー

分類Dev

Azure ActiveDirectory上のアプリケーションを削除できません

分類Dev

Azure ActiveDirectory上のアプリケーションを削除できません

分類Dev

Azure ActiveDirectoryアプリケーションのユーザーとロールを取得する

分類Dev

Azure ActiveDirectoryセキュリティグループからメンバーを削除するためのAPIURL

分類Dev

Azure ActiveDirectoryトークンを使用するプロバイダーの詳細

分類Dev

Azure ActiveDirectoryにクエリを実行するAzureサービス

分類Dev

Azure ActiveDirectory-AzureCLIを使用してアクセストークンを取得します

分類Dev

Azure ActiveDirectoryの使用-ローカルおよび公開時にログインするための1つのアプリケーション

分類Dev

DjangoWebアプリケーションアクセスActiveDirectory

分類Dev

Office 365 Azure ActiveDirectoryテナントでAzureActiveDirectoryアクセス制御を有効にする

分類Dev

Azure ActiveDirectory-クライアント証明書の使用

Related 関連記事

  1. 1

    Azure ActiveDirectoryを使用してServiceFabricアプリケーションのKeyVaultにアクセスする

  2. 2

    Azure ActiveDirectoryでアプリケーションごとにアクセス許可をスコープする方法

  3. 3

    Azure ActiveDirectory内のアプリケーション間のアクセスを構成できません

  4. 4

    あるAzureActive Directoryからユーザーを追加して、別のAzure ActiveDirectory内のアプリケーションにアクセスする

  5. 5

    Azure ActiveDirectoryアプリへのアクセスを特定のテナントに制限する

  6. 6

    デバイスコードを使用して、Azure ActiveDirectoryに対してPythonアプリケーションをインタラクティブに認証する

  7. 7

    Azure ActiveDirectoryを介して複数の保護されたWebAPIにアクセスするためのAngularシングルページアプリケーション

  8. 8

    Azure ActiveDirectoryを使用して外部アプリケーションのクライアント資格情報フローを設定する方法

  9. 9

    Azure ActiveDirectoryからアプリケーションに付与されたアクセス許可を取り消すことはできません

  10. 10

    Azure ActiveDirectoryの役割

  11. 11

    Azure ActiveDirectoryアプリケーションキーの更新

  12. 12

    Azure ActiveDirectoryはAzureの外部のWebApiでアクセストークンを確認します

  13. 13

    Azure ActiveDirectoryアプリケーションとサービスのプリンシパル

  14. 14

    Azure ActiveDirectoryのアクセストークンとシングルサインオン

  15. 15

    Azure ActiveDirectoryユーザーに特定のアプリサービスアクセスを割り当てる

  16. 16

    Azure ActiveDirectoryグループによるアプリケーションの要求

  17. 17

    Azure ActiveDirectoryを使用して他のサービスにアクセスする

  18. 18

    Azure ActiveDirectoryクライアントの資格情報フロー

  19. 19

    Azure ActiveDirectory上のアプリケーションを削除できません

  20. 20

    Azure ActiveDirectory上のアプリケーションを削除できません

  21. 21

    Azure ActiveDirectoryアプリケーションのユーザーとロールを取得する

  22. 22

    Azure ActiveDirectoryセキュリティグループからメンバーを削除するためのAPIURL

  23. 23

    Azure ActiveDirectoryトークンを使用するプロバイダーの詳細

  24. 24

    Azure ActiveDirectoryにクエリを実行するAzureサービス

  25. 25

    Azure ActiveDirectory-AzureCLIを使用してアクセストークンを取得します

  26. 26

    Azure ActiveDirectoryの使用-ローカルおよび公開時にログインするための1つのアプリケーション

  27. 27

    DjangoWebアプリケーションアクセスActiveDirectory

  28. 28

    Office 365 Azure ActiveDirectoryテナントでAzureActiveDirectoryアクセス制御を有効にする

  29. 29

    Azure ActiveDirectory-クライアント証明書の使用

ホットタグ

アーカイブ