gpt4 book ai didi

c# - Web API 自定义身份验证过滤器

转载 作者:行者123 更新时间:2023-12-02 02:11:40 30 4
gpt4 key购买 nike

我正在尝试为 ASP.NET MVC 5 网站/应用程序的 Web API Controller 创建一个自定义过滤器,以检查我存储在数据库中的特定 token 的请求 header 。我发现的大多数示例都包含用户凭据,然后使用身份对用户进行身份验证。不完全是我要找的。

这是tutorial我发现并正在关注。

Web API 应该只处理“外部”HTTP 调用,网站端目前将拥有自己的 Controller (但可能会发生变化)。

如果可能,此过滤器应与已存在的身份 2 系统接口(interface)。

我所做的是发送用户凭据,然后为用户分配一个 token ,然后我想使用该 token 来验证请求。有没有一种方法可以根据 token 过滤请求,或者我是否需要使用 Owin 身份及其 token 管理。我正在使用移动客户端(目前是 iOS,也将包括 Android)来调用电话。我可以引用任何示例或教程吗?

token 目前是字母数字字符和符号的随机组合。

谢谢。

附注我可以在需要的地方发布代码片段和内容。

编辑:HTTP 请求将根据它们是否包含我们的数据库/系统中存在的 token 进行过滤。包含 token 或我们系统中不存在的请求将收到未经授权的错误(401?)

最佳答案

假设您认为向每个请求发送用户名和密码不好。请参阅我的以下不带用户名和密码的实现,因为我们不会在每个请求中发送用户名和密码。

public class AuthenticationFilter : AuthorizationFilterAttribute
{
/// <summary>
/// read requested header and validated
/// </summary>
/// <param name="actionContext"></param>
public override void OnAuthorization(HttpActionContext actionContext)
{
var identity = FetchFromHeader(actionContext);

if(identity != null)
{
var securityService = actionContext.ControllerContext.Configuration.DependencyResolver.GetService(typeof(ILoginService)) as ILoginService;
if (securityService.TokenAuthentication(identity))
{
CurrentThread.SetPrincipal(new GenericPrincipal(new GenericIdentity(identity), null), null, null);
}
else
{
actionContext.Response = new HttpResponseMessage(HttpStatusCode.Unauthorized);
return;
}
}
else
{
actionContext.Response = new HttpResponseMessage(HttpStatusCode.BadRequest);
return;
}
base.OnAuthorization(actionContext);
}

/// <summary>
/// retrive header detail from the request
/// </summary>
/// <param name="actionContext"></param>
/// <returns></returns>
private string FetchFromHeader(HttpActionContext actionContext)
{
string requestToken = null;

var authRequest = actionContext.Request.Headers.Authorization;
if (authRequest != null && !string.IsNullOrEmpty(authRequest.Scheme) && authRequest.Scheme == "Basic")
requestToken = authRequest.Parameter;

return requestToken;
}
}

关于c# - Web API 自定义身份验证过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38790904/

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