gpt4 book ai didi

c# - Web Api 2 无状态用户

转载 作者:太空宇宙 更新时间:2023-11-03 10:43:12 26 4
gpt4 key购买 nike

我相信我了解无 session /无状态 REST 的基础知识,但我在 Asp.Net Web Api 2 中遇到问题,因为我以前没有使用过它。我已经设置了像这样使用自定义 System.Web.Http.AuthorizeAttribute 的 ApiControllers。

public class ApiAuthorizeAttribute : System.Web.Http.AuthorizeAttribute
{
public override void OnAuthorization(HttpActionContext actionContext)
{
if (actionContext.Request.Headers.Authorization != null)
{
//Set identity??
return;
}
actionContext.Response = actionContext.Request.CreateResponse(HttpStatusCode.Unauthorized);
}
}

我有一个包含用户的数据库,我需要使用它们来获取权限以获取/发布/放置/删除内容,但不想使用 session 。我从未使用过 asp.net Identity,因此我不熟悉它的特性和功能。

我的实现想法是使用用户凭据或 api secret 签名来验证用户的身份并为每个请求获取权限。问题是,通过使用 AuthorizeAttribute 或类似的东西,如果他们的凭据正确,我如何在该请求期间向 Controller 提供用户信息?

更新:正在使用基于 this.User (ApiController.User) session 还是可以将其用于该单个请求。如果可以,如何设置

最佳答案

您可以使用 HttpContext.Items 来保存当前请求的用户数据。根据 Auth header 设置身份后,您可以拥有

System.Web.HttpContext.Current.Items["userdata"]=userDataObject, 

另一种方法是编写您自己的操作过滤器以进行身份​​验证(但要格外小心)并将数据传递给 Controller ​​。

public class MyAuthAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
//do authorization here

base.OnActionExecuting(filterContext);

// Create object parameter.
filterContext.ActionParameters["userdata"] = new User("John", "Smith");

}
}

然后在 Controller 中

[MyAuthAttribute]
ActionResult SomeAction(User userdata) //this will have user data
{

}

关于c# - Web Api 2 无状态用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24515575/

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