asp.NetWeb API認証無記名トークン検証Bearer Token Authentication簡単実現
4344 ワード
1. Startup.Auth.csファイル
属性の追加
1
静的コンストラクタの追加
1
2
3
4
5
6
7
メソッドConfigureAuthに追加
1
2
2. WebApiConfig.csファイル
メソッドRegisterに追加
1
2
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
4. 認証が必要なコントローラまたはメソッドにタグを追加
1
2
3
4
テスト:
リクエストヘッダにトークンを追加します.フォーマットは次のとおりです.
Authorization: Bearer boQtj0SCGz2GFGz...
分類:Web API
属性の追加
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