ASP.net Web API を使用して、ベアラー トークンを使用した要求認証を設定することを検討しています。OWIN サーバー ミドルウェアを使用する場合、暗号化キーはどこから取得されますか? サーバーは、有効期限が切れていないトークンをどのように取り消すのでしょうか?
質問する
7354 次
1 に答える
5
- OWIN ServerMiddleware のデフォルトの Tiken データ保護アプローチは、DPAPI (データ保護 API)を使用しています。
- サーバー側でトークンを取り消すには、トークン ストアを実装する必要があります。
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 に答える