2017-04-07 7 views
0

Identity Frameworkを使用した.netプロジェクトでトークンを更新することはできますが、生成することはできます。例外は、次のされていますトークンリフレッシュ時にAuthenticationTokenReceiveContextがOwin.Security/Identity Frameworkのトークン値にアクセスできない

[ArgumentNullException: Value cannot be null. 
Parameter name: token] 
Microsoft.Owin.Security.Infrastructure.AuthenticationTokenReceiveContext..ctor(IOwinContext context, ISecureDataFormat`1 secureDataFormat, String token) +136 
    Microsoft.Owin.Security.OAuth.<InvokeTokenEndpointRefreshTokenGrantAsync>d__44.MoveNext() +158 
    System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) +99 
    System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) +58 
    System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd(Task task) +25 
    Microsoft.Owin.Security.OAuth.<InvokeTokenEndpointAsync>d__1e.MoveNext() +2159 

により、この例外には、デバッガがさえトークンさわやかな関数にステップしません:私はポストマンを使用してデバッグしていて、掲載リクエストが適切に含まれている

public async Task ReceiveAsync(AuthenticationTokenReceiveContext context) 
     { 

      var allowedOrigin = context.OwinContext.Get<string>("as:clientAllowedOrigin"); 
      context.OwinContext.Response.Headers.Add("Access-Control-Allow-Origin", new[] { allowedOrigin }); 

      string hashedTokenId = Helper.GetHash(context.Token); 

      using (AuthRepository _repo = new AuthRepository()) 
      { 
       var refreshToken = await _repo.FindRefreshToken(hashedTokenId); 

       if (refreshToken != null) 
       { 
        //Get protectedTicket from refreshToken class 
        context.DeserializeTicket(refreshToken.ProtectedTicket); 
        var result = await _repo.RemoveRefreshToken(hashedTokenId); 
       } 
      } 
     } 

リクエストボディでは検出されず、リクエストヘッダでも検出されません。

Katana devチームはhttp://katanaproject.codeplex.com/workitem/480というバグを報告していますが、更新の予定はありません。

同じコードベースは、リモートサーバー上で実行されます:私は例外を防ぐために、コンテキストにトークン強制可能性がどのようにhttps://github.com/tjoudeh/AngularJSAuthentication

:これを再現することができるhttp://ngauthenticationweb.azurewebsites.net/

完全なプロジェクトはで入手できますか?

答えて

0

郵便配達員のgrant_typeとclient_idを確認できますか? grant_typeは 'password'でなければなりません。

サンプル:= ABCD &パスワード ユーザ名= 123 & grant_type @ ABC =パスワード&のclient_id = c4b2f91dbe014b558d7fa00ca54ed33d

+0

grant_typeが初期ログイン時に 'パスワード' であり、それは素晴らしい作品。何がうまくいかないのは、リフレッシュ・トークンベースの再認証に使用されるgrant_typeの 'refresh_token'です。 – Kurak

関連する問題