[ASP.NET]Web API bearer token 驗證

本文介紹Visual Studio 2013預設的Web API bearer token 驗證

環境:Visual Studio 2013

從 Visual Studio 2013 新增 Web API 專案,如下,

image

 

預設使用 bearer token 驗證,如下,

image

 

那我們要如何使用它呢?

在 App_Start 目錄的 Statup.Auth.cs 有設定,如下,

image

 

Path為 apRoot/Token ,Token的時效為 14 天,是否可以走 http (測試方便,上線記得要設 false)。

如果我們要使用預設提供的User,直接就可以使用了。

但如果我們有自已的驗證使用者帳密的方式,例如呼叫其他SSO驗證,或是從DB取得資料驗證,

那我們可以新增一個 OAuthAuthorizationServerProvider ,或是直接修改範本提供給我們的 ApplicationOAuthProvider 。

為了 Demo 方便,我們直接檢查帳號如果跟密碼相同就算OK。

所以修改 Providers\ApplicationOAuthProvider.cs

1.修改 ValidateClientAuthentication Method,不去 check ClientId,如下,

public override Task ValidateClientAuthentication(OAuthValidateClientAuthenticationContext context)
{
	context.Validated();
	return Task.FromResult<object>(null);
}

 

2.修改 GrantResourceOwnerCredentials Method,帳號是 rainmaker 相同就算OK,如下,

public override async Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context)
{
	context.OwinContext.Response.Headers.Add("Access-Control-Allow-Origin", new[] { "*" });
if (context.UserName.ToLower()!="rainmaker")
	{
		context.Rejected();
		return;
	}
	var id = new ClaimsIdentity(context.Options.AuthenticationType);
	//可以用ClaimTypes 來加入一些定義好的 Claim 如,Name, Role 等等
            id.AddClaim(new Claim(ClaimTypes.Name, context.UserName));
            id.AddClaim(new Claim(ClaimTypes.Role, "Admin"));
            context.Validated(id);
            context.Request.Context.Authentication.SignIn(id);
	context.Validated(id);
	context.Request.Context.Authentication.SignIn(id);
}

 

然後執行起來後,就可以用 Fiddler 來測試,給它帳密,取回Token。

Request Body的值給(最後請不要按Enter,換行哦!)

grant_type=password&username=rainmaker&password=rainmaker

 

我測試的站台是 http://localhost:11446/ ,所以取 token 的URL就是 http://localhost:11446/token ,測試如下,

image

 

image

 

再來就是要用這個 access_token 去取 ValuesController 的資料,

而 token 要在 Header 裡,如下,

Authorization:Bearer [剛才的access token]

image

 

執行後,就可順利取到 ValuesController 的值,如下,

image

 

如果沒有給 token 的話,會回驗證不過,回傳401,如下,

image

 

以上是針對Web API 裡面的Token機制跟大家分享,

大家如果有其他的想法,也請分享一下哦! Thanks.

Hi, 

亂馬客Blog已移到了 「亂馬客​ : Re:從零開始的軟體開發生活

請大家繼續支持 ^_^