gpt4 book ai didi

asp.net-mvc - Web API 访问 token 如何在服务器上进行验证?

转载 作者:行者123 更新时间:2023-12-02 13:01:21 25 4
gpt4 key购买 nike

生成 WebAPI 访问 token 后,WebAPI 如何为下一个请求验证该 token ?我想知道是否可以使用 [Authorize] 属性,它必须将客户端发送的 token 与服务器端的 token (如果存储在某处)进行比较。它只是检查 token 是否存在而不是它的值吗?

最佳答案

不记名 token

首先,颁发授权 token 的身份提供商或 token 提供商需要具有与 Web Api 应用程序相同的机器 key 设置以进行加密/解密:

<machineKey decryptionKey="B7EFF1C5839A624ED0268917EDE82F408D2ECBFAC817" validation="SHA1" validationKey="C2B8DF31AB9624D8066DFDA1A479542825F3B48865C4E47AF6A026F22D853DEC2B3248DF268599BF89EF78B9E86CA05AC73577E0D5A14C45E0267588850B" /> </system.web>

因为 Bearertoken 在底层使用 MachineKey 加密。换句话说,如果您没有相同的设置,您的 Web api 将无法解密 token (验证它)。这是通过以下方式自动完成的:

Microsoft.Owin.Security.OAuth.dll

使用中间件。

如果您想使用用户名或角色进行简单授权,则可以在 Web API Controller /操作上使用授权属性,如下所示:

[Authorize(Roles="Administrators,Managers",Users ="Mike,Laura")] 

如果您想要自定义授权,那么您必须实现一个自定义授权属性,它将在您的 Web api 中处理自定义授权。如果不允许用户通过,您将返回 401 UnAuthorized 响应:

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 Controller 或操作上:

[CustomAuthorize(Id = "AnyId", Rules = new RulesExampleEnum[] { RulesExampleEnum.Rule1, RulesExampleEnum.Rule3 })]
public IEnumerable<object> Get()
{...

关于asp.net-mvc - Web API 访问 token 如何在服务器上进行验证?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37507294/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com