一旦生成了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. 如何验证Google身份验证API访问令牌?
- 2. 如何验证资源服务器上的WSO2 oauth2访问令牌
- 3. Azure移动服务令牌验证在Web API和MVC
- 4. 身份验证:Facebook用户在服务器端访问令牌验证?
- 5. 如何在不访问验证服务器的情况下验证OAuth2访问令牌(JWT)
- 6. 使用ASP.NET Core后端服务器验证Google访问令牌
- 7. 验证Facebook用户ID和访问令牌服务器端
- 8. 在web api中验证Thinktecture OAuth令牌
- 9. 如何验证服务器上的FCM注册令牌?
- 10. 如何通过服务器端身份验证获取用户访问令牌
- 11. Azure Web API的身份验证令牌
- 12. 如何在服务器端获取身份验证令牌?
- 13. 在运行NGINX + Node.JS的服务器上验证Firebase JWT令牌
- 14. 身份服务器本身的API控制器访问令牌
- 15. 验证微服务体系结构的每项服务中的访问令牌
- 16. 在web api客户端访问令牌客户端IdSrv3身份验证
- 17. 使用外部访问令牌或本地访问令牌
- 18. 如何验证Firebase令牌服务器端?
- 19. 如何刷新与服务器的身份验证令牌
- 20. 在Windows上从Python访问SPNEGO身份验证的Web服务
- 21. 存储API访问令牌服务器端
- 22. 如何将gmail身份验证令牌发送到服务器节点js api?
- 23. 服务器上的JWT登录流和令牌验证
- 24. PHP Google+ Plaform服务器端用户验证并获取访问令牌
- 25. 如何禁用服务器端验证mvc web api控制器
- 26. Web API - 如何使用令牌访问API
- 27. Spring安全OAuth2 - 验证访问令牌
- 28. 错误验证访问令牌
- 29. IdSrv4 - 访问令牌验证程序EndPoint
- 30. OAuthException:错误验证访问令牌
您正在讨论访问令牌以及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