一旦生成了WebAPI
訪問令牌,WebAPI
如何爲下一個請求驗證該令牌?我想知道是否可以使用[Authorize]
屬性,它必須將客戶端發送的令牌與服務器端的令牌(如果存儲在某處)進行比較。它只是檢查令牌是否存在而不是它的值?如何在服務器上驗證Web API訪問令牌?
回答
祕密密鑰在標頭中發送,請求從客戶端到服務器,並且在使用[授權]屬性的每個請求的服務器上驗證內容。
您可以使用像Telerik(免費)的Fiddler這樣的工具來查看正在傳輸的數據,但不能查看內容(因爲它已被加密)。在使用MVC/WebAPI時,檢查原始Web流量是非常寶貴的,所以我強烈建議。這是一個鏈接到提琴手,雖然其他類似的工具也存在。
http://www.telerik.com/fiddler
爲了回答你問題的第二部分,服務器絕對允許請求繼續進行授權之前檢查密鑰的內容。
這節省了我的一天 –
一旦生成訪問令牌,客戶端必須在每個請求的Header中包含訪問令牌。
客戶端可能會在Authorization
HTTP標頭中設置訪問令牌。
在服務器端,您應該創建類來處理授權,這是從System.Web.Http.AuthorizeAttribute
派生類,像下面:
public class AuthorizationHandlerAttribute : AuthorizeAttribute
{
string AccessTokenFromRequest = "";
if (actionContext.Request.Headers.Authorization != null)
{
// get the access token
AccessTokenFromRequest = actionContext.Request.Headers.Authorization.Parameter;
}
string AccessTokenStored = "";
// write some code to get stored access token, probably from database
// then assign the value to a variable for later use
// compare access token
if (AccessTokenFromRequest != AccessTokenStored)
{
// if the token is not valid then return 401 Http Stasus
// or simply call base method
base.HandleUnauthorizedRequest(actionContext);
}
}
然後使用新創建的類並將其安裝在controller
或action
您希望防止未經授權的訪問。
public class UsersController : ApiController
{
[AuthorizationHandler]
public User Get(int id)
{
// only request with valid access token will reach this
}
}
承載令牌
首先,它發出授權令牌的身份提供者或令牌提供者需要具有相同的機鍵設置爲加密/解密的網絡API應用程序:
<的machineKey decryptionKey = 「B7EFF1C5839A624ED0268917EDE82F408D2ECBFAC817」 驗證= 「SHA1」 驗證準則NKEY = 「C2B8DF31AB9624D8066DFDA1A479542825F3B48865C4E47AF6A026F22D853DEC2B3248DF268599BF89EF78B9E86CA05AC73577E0D5A14C45E0267588850B」 /> </system.web>
因爲罩下Bearertoken使用的machineKey加密。 換句話說,如果你沒有相同的設置,你的Web API將無法解密令牌(驗證它)。 這是通過自動完成:使用中間件
Microsoft.Owin.Security.OAuth.dll
。
可以使用授權屬性在你的web API控制器/動作,如果你想用的用戶名和角色的簡單授權,像這樣:
[Authorize(Roles="Administrators,Managers",Users ="Mike,Laura")]
如果你想自定義授權,那麼你已經實現自定義授權屬性,它將處理您的web api中的自定義授權。如果不允許用戶通過您會返回一個401未經授權響應:
actionContext.Response = actionContext.Request.CreateResponse(HttpStatusCode.Unauthorized);
actionContext.Response.Headers.Add("WWW-Authenticate","Bearer location='http://localhost:8323/account/login'");
例如:
[AttributeUsage(AttributeTargets.Method | AttributeTargets.Class)]
public class CustomAuthorizeAttribute : System.Web.Http.Filters.AuthorizationFilterAttribute
{
public RulesExampleEnum[] Rules { get; set; }
public string Id { get; set; }
.....
// Summary:
// Calls when a process requests authorization.
//
// Parameters:
// actionContext:
// The action context, which encapsulates information for using System.Web.Http.Filters.AuthorizationFilterAttribute.
public virtual void OnAuthorization(HttpActionContext actionContext);
public virtual Task OnAuthorizationAsync(HttpActionContext actionContext, CancellationToken cancellationToken);
,並在您webApiConfig.cs註冊它
config.Filters.Add(new CustomAuthorizeAttribute());
並將其應用於Web Api控制器或操作:
[CustomAuthorize(Id = "AnyId", Rules = new RulesExampleEnum[] { RulesExampleEnum.Rule1, RulesExampleEnum.Rule3 })]
public IEnumerable<object> Get()
{...
這對我來說是一個救命稻草,這正是我們試圖在API消費者使用HTTP基本身份驗證(爲了識別機器,訪問控制)進行身份驗證時所要做的,然後我們需要一個OAUTH令牌(爲了識別用戶,爲了權限/身份控制)。 –
- 1. 如何驗證OAuth資源服務器中的訪問令牌
- 2. 驗證服務器上的Deezer訪問令牌
- 3. 如何驗證Google身份驗證API訪問令牌?
- 4. 如何驗證資源服務器上的WSO2 oauth2訪問令牌
- 5. Azure移動服務令牌驗證在Web API和MVC
- 6. 身份驗證:Facebook用戶在服務器端訪問令牌驗證?
- 7. 如何在不訪問驗證服務器的情況下驗證OAuth2訪問令牌(JWT)
- 8. 使用Facebook訪問令牌服務器端身份驗證
- 9. 使用ASP.NET Core後端服務器驗證Google訪問令牌
- 10. Facebook應用程序:服務器端訪問令牌驗證
- 11. 驗證Facebook用戶ID和訪問令牌服務器端
- 12. Google OAuth2驗證服務器流程中的訪問令牌
- 13. Facebook訪問令牌 - 服務器端身份驗證
- 14. 我如何驗證我在服務器端的定製Oauth2訪問令牌
- 15. 訪問令牌驗證
- 16. 在web api中驗證Thinktecture OAuth令牌
- 17. 如何驗證服務器上的FCM註冊令牌?
- 18. 瀏覽器和Web服務器API認證令牌
- 19. 如何通過服務器端身份驗證獲取用戶訪問令牌
- 20. 驗證Spring RESTful資源服務器上的OAuth 2.0訪問令牌
- 21. 如何在服務器端獲取身份驗證令牌?
- 22. Azure Web API的身份驗證令牌
- 23. OpenID在PHP中訪問令牌驗證
- 24. 在運行NGINX + Node.JS的服務器上驗證Firebase JWT令牌
- 25. 服務器端的Google訪問令牌
- 26. 身份服務器本身的API控制器訪問令牌
- 27. 如何在Web API中使用Google樣式令牌驗證
- 28. 如何驗證NodeJS上的AWS Cognito訪問令牌
- 29. 在作曲家如何使用訪問令牌REST服務器
- 30. 驗證微服務體系結構的每項服務中的訪問令牌
您正在討論訪問令牌以及cookie。你需要澄清你的環境。你在OWIN中使用承載令牌認證嗎?請添加任何與身份驗證相關的代碼,以便我們可以幫助您。 –
@FedericoDipuma是的,我正在使用OWIN。只想知道更多關於令牌的知識。我的問題很簡單。 –
您是否看過[在ASP.NET Web API 2.2中使用個人帳戶和本地登錄保護Web API](http://www.asp.net/web-api/overview/security/individual-accounts-in-web -API)? – Igor