3

ASP.net Web API を使用して、ベアラー トークンを使用した要求認証を設定することを検討しています。OWIN サーバー ミドルウェアを使用する場合、暗号化キーはどこから取得されますか? サーバーは、有効期限が切れていないトークンをどのように取り消すのでしょうか?

4

1 に答える 1

5
  1. OWIN ServerMiddleware のデフォルトの Tiken データ保護アプローチは、DPAPI (データ保護 API)を使用しています。
  2. サーバー側でトークンを取り消すには、トークン ストアを実装する必要があります。AccessTokenProvider.Createトークンの作成と保存に使用できます。

このようなシナリオの例を次に示します。これをコード スニペットの例として取り上げます。

Startup.cs に登録する

 app.UseOAuthAuthorizationServer(new OAuthAuthorizationServerOptions
        {
            AuthorizeEndpointPath = new PathString("/Authorize"),
            TokenEndpointPath = new PathString("/Token"),
            ApplicationCanDisplayErrors = true,
            Provider = new ApplicationOAuthProvider(PublicClientId, UserManagerFactory),
            AuthorizationCodeProvider = new MyAuthenticationTokenProvider(TokenType.Code),
            AccessTokenProvider = new MyAuthenticationTokenProvider(TokenType.Access),
            RefreshTokenProvider = new MyAuthenticationTokenProvider(TokenType.Refresh),
            AuthorizationCodeFormat = new MyFormatProvider("MyAudiences"),
            AccessTokenFormat = new MyFormatProvider("MyAudiences"),
            RefreshTokenFormat = new MyFormatProvider("MyAudiences"))
        });
    }

暗号化の提供:これは Katana プロジェクトの JwtFormat に基づいています。JwtFormat.protect() メソッドはまだサポートされていません。したがって、独自の実装を作成する必要があります。

    //You need to manage your Key in this class
    public class MyFormatProvider: ISecureDataFormat<AuthenticationTicket>
    {
        public MyFormatProvider(string allowedAudiences)
        {
        }
        public string Protect(AuthenticationTicket data)
        {
            return "encrypted";
        }
        public AuthenticationTicket Unprotect(string protectedText)
        {
            return new AuthenticationTicket(new System.Security.Claims.ClaimsIdentity(), new AuthenticationProperties());
        }
    }

トークン プロバイダー

    public enum TokenType { Code,Access,Refresh }
    public class MyAuthenticationTokenProvider : AuthenticationTokenProvider
    {
        TokenType tokenType = TokenType.Access;
        public MyAuthenticationTokenProvider(TokenType tokenType)
        {

        }
        public override void Create(AuthenticationTokenCreateContext context)
        {
            /*Create Token, Store Token and Tiket info*/
            context.SetToken("MyToken");/*This will call Your MyFormatProvider internally*/
            base.Create(context);
        }

        public override void Receive(AuthenticationTokenReceiveContext context)
        {
            /*retrieve Token and Tiket info to process*/
            base.Receive(context);
        }
    }
于 2013-10-24T12:55:20.770 に答える