AuthenticationEvents(OIDC)中に私はAuthenticationPropertiesにいくつかのデータを格納しました。これは実用的であると思った場所であったからです(つまりAdal Token Cacheをそこに格納した良いアイデアである)。クレームインジェクション中に認証トークンにアクセスする方法
次に、クレーム変換を使用して、別のサービスのユーザープロファイルクレームを追加します。そのサービスはOAuth-Bearer-Authenticationを使用します。 GetTokenAsync()
は、そのサービスに連絡しようとする私の主張の注入を、実行しようとしている、AuthenticationManager.Authenticate()
を呼び出します:ベアラ-認証に必要なトークンが楽しい部分今httpContext.Authentication.GetTokenAsync(_sharedAuthOptions.SignInScheme, tokenName);
を呼び出すことにより、AuthenticationPropertiesから取得されますその後、などなど、私の主張注入、実行されますAuthManager.Authetnicate()
、呼び出しますGetTokenAsync()
を呼ぶのOAuth-ベアラ・トークン、ニーズ(StackOverflowExceptionが - イェーイ)
いくつかのコードスニペットは:
は、トークンを保存します
public static async Task<AuthenticationResult> AuthorizationCodeReceived(AuthorizationCodeReceivedContext context)
{
var clientCred = new ClientCredential(context.Options.ClientId, context.Options.ClientSecret);
var authContext = new AuthenticationContext(context.Options.Authority, false, new TokenCache());
var result = await authContext.AcquireTokenByAuthorizationCodeAsync(context.ProtocolMessage.Code,
new Uri(context.Properties.Items[OpenIdConnectDefaults.RedirectUriForCodePropertiesKey]), clientCred, context.Options.Resource);
var authToken = SerializeCache(authContext.TokenCache);
var properties = new List<AuthenticationToken> { authToken };
context.Properties.StoreTokens(properties);
return result;
}
今すぐ質問にトークン
await httpContext.Authentication.GetTokenAsync(_sharedAuthOptions.SignInScheme, AdalTokenCacheName);
を読む: のauth-パイプラインを再実行せずAuthenticationPropertiesにアクセスする方法はありますか? 生成されたプリンシパルクレームに追加データを保存する良い方法はありますか?