gpt4 book ai didi

c# - 如何开发接受登录或 token 的自定义 AuthorizeAttribute?

转载 作者:行者123 更新时间:2023-11-30 21:51:50 24 4
gpt4 key购买 nike

在我的 MVC 5 应用程序中,我按如下方式装饰我的 Controller :

[Authorize]
public class Controller
{
..

但是,我的一个要求是使用 token 来授权操作而无需转到登录屏幕。即:http://{website}/Action?token={/* token for this user */}

因此,我如何开发接受登录(默认行为)或 token (自定义、必需行为)的自定义 AuthorizeAttribute?

换句话说,如果我使用 http://{website}/Action , 我会被重定向到登录屏幕(如果我没有被授权),但是如果我使用 http://{website}/Action?token={/* token for this user */} ,我将获得授权并重定向到上述操作。


[TokenAuthorize]

public class TokenAuthorize : AuthorizeAttribute
{
private const string SecureToken = "token";

public override void OnAuthorization(AuthorizationContext filterContext)
{
if (Authorize(filterContext))
{
return;
}

HandleUnauthorizedRequest(filterContext);
}

private bool Authorize(AuthorizationContext actionContext)
{
try
{
HttpRequestBase request = actionContext.RequestContext.HttpContext.Request;
string token = request.Params[SecureToken];

return SecurityManager.IsTokenValid(token);
}
catch (Exception)
{
return false;
}
}
}

如果我装饰我的 Controller :

[Authorize]
[TokenAuthorize]
public class Controller
{
..

处理为AuthorizeTokenAuthorize <子> (1) 。我需要开发一种处理方式,例如 Authorize或者 TokenAuthorize

最佳答案

仅使用 TokenAuthorize 进行装饰,然后在不存在 token 时回退到默认行为怎么样?

TokenAuthorize.cs

protected override bool AuthorizeCore(HttpContextBase httpContext)
{
bool isTokenAuthorized = HasValidToken(...);
if(isTokenAuthorized) return true;

bool isDefaultAuthorized = base.AuthorizeCore(httpContext);
if(isDefaultAuthorized) return true;

return false;
}

MyController.cs

[TokenAuthorize]
public class MyController
{
...
}

关于c# - 如何开发接受登录或 token 的自定义 AuthorizeAttribute?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35184229/

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