gpt4 book ai didi

asp.net-web-api - 如何使用 Microsoft.Owin.Security 自定义 System.Web.Http.AuthorizeAttribute?

转载 作者:行者123 更新时间:2023-12-01 14:59:17 25 4
gpt4 key购买 nike

我在我的 WebAPI 中实现了自定义 AuthorizeAttribute(请注意,这与 MVC AuthorizeAttribute 不同)。

我已经覆盖了 OnAuthorization 方法。在这种方法中,我检查用户是否已通过身份验证。如果未通过身份验证,我将要求用户登录。

我的部分自定义逻辑是检查经过身份验证的用户是否有权继续(基本上我检查他们的姓名/电子邮件。如果它存在于预定义列表中,那么他们可以访问)。

我看到的问题是:用户认证成功BUT FAILS被授权后,我看到有一个无限循环重定向到登录页面。

同样,用户凭据的挑战在 OnAuthorization 方法中。是什么导致了这种无限循环,一旦确定用户没有授权,如何防止这种情况发生?

* 更新了片段 *

public override void OnAuthorization(System.Web.Http.Controllers.HttpActionContext actionContext)
{
base.OnAuthorization(actionContext); // Should this be here?

var owinContext = HttpContext.Current.GetOwinContext();
var authenticated = owinContext.Authentication.User.Identity.IsAuthenticated;
var request = System.Web.HttpContext.Current.Request;

if (!authenticated)
{
// Challenge user for crednetials
if (!request.IsAuthenticated)
{
// This is where the user is requested to login.
owinContext.Authentication.Challenge(
new AuthenticationProperties { RedirectUri = "/" },
WsFederationAuthenticationDefaults.AuthenticationType);
}
}
else
{
// At this point the user ia authenticated.
// Now lets check if user is authorized for this application.
var isAuthorized = SecurityHelper.IsUserAuthorized();
if (isAuthorized)
{
// authorized.
return;
}

// not authorized.
actionContext.Response = new System.Net.Http.HttpResponseMessage(System.Net.HttpStatusCode.Unauthorized);
}
}

最佳答案

您可以尝试删除 OnAuthorization 并添加:

protected override bool IsAuthorized(HttpActionContext actionContext)
{
var owinContext = HttpContext.Current.GetOwinContext();
var authenticated = owinContext.Authentication.User.Identity.IsAuthenticated;

return authenticated & SecurityHelper.IsUserAuthorized();
}

我不明白你为什么要在身份验证失败时重定向,API 应该只返回 401 吗?

关于asp.net-web-api - 如何使用 Microsoft.Owin.Security 自定义 System.Web.Http.AuthorizeAttribute?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29375333/

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