2016-11-21 13 views
0

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にアクセスする方法はありますか? 生成されたプリンシパルクレームに追加データを保存する良い方法はありますか?

答えて

0

私の問題に対する解決策はかなり簡単でした。
私はもともとtokenCachesの存在が認証セッションの存続期間に結びついていることを確認したかったのです。何らかの理由で私はそれを前述の特性に保存することをお勧めしました。
もう一度やりません。データをクレームに保存すれば、すべてが魅力的に機能します。

関連する問題