asp.NetWeb API認証無記名トークン検証Bearer Token Authentication簡単実現

4344 ワード

1. Startup.Auth.csファイル
属性の追加
1 public   static   OAuthBearerAuthenticationOptions OAuthBearerOptions {  get private   set ; }
静的コンストラクタの追加
1
2
3
4
5
6
7 /// /// /// static   Startup() {      OAuthBearerOptions =  new   OAuthBearerAuthenticationOptions(); }   
メソッドConfigureAuthに追加
1
2 // app.UseOAuthBearerAuthentication(OAuthBearerOptions);
 
2. WebApiConfig.csファイル
メソッドRegisterに追加
1
2 config.SuppressDefaultHostAuthentication(); config.Filters.Add( new   HostAuthenticationFilter( "Bearer" ));
 
3.認証方法の作成(Web API)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33 [HttpPost] public   async Task Authenticate( string   userName,  string   password) {      if   ( string .IsNullOrEmpty(userAccount) ||  string .IsNullOrEmpty(password))      {          return   string .Empty;      }
     //      User user = await UserManager.FindAsync(userName, password);                 if   (user ==  null )      {          return   string .Empty;      }
       //      var   identity =  new   ClaimsIdentity(Startup.OAuthBearerOptions.AuthenticationType);      identity.AddClaim( new   Claim(ClaimTypes.NameIdentifier, user.Id.ToString()));      if   (UserManager.SupportsUserRole)      {          IList< string > roles = await UserManager.GetRolesAsync(user.Id).ConfigureAwait( false );          foreach   ( string   roleName  in   roles)          {              identity.AddClaim( new   Claim(ClaimTypes.Role, roleName, ClaimValueTypes.String));          }      }      AuthenticationTicket ticket =  new   AuthenticationTicket(identity,  new   AuthenticationProperties());      var   currentUtc = DateTime.UtcNow;      ticket.Properties.IssuedUtc = currentUtc;      ticket.Properties.ExpiresUtc = currentUtc.Add(TimeSpan.FromDays(1));
       //      return   Startup.OAuthBearerOptions.AccessTokenFormat.Protect(ticket); }
 4. 認証が必要なコントローラまたはメソッドにタグを追加
1
2
3
4 [Authorize(Roles =  "Admin" )] public   class   UsersController : ApiController { }
 
テスト:
リクエストヘッダにトークンを追加します.フォーマットは次のとおりです.
Authorization: Bearer boQtj0SCGz2GFGz...
 
 
分類:Web API