asp.net core restful风格的认证过滤怎么定制?

发布于 2022-09-04 09:10:25 字数 656 浏览 18 评论 0

我希望某些restful操作需要认证,可asp.net 的认证注解不好用:

app.UseCookieAuthentication(new CookieAuthenticationOptions
            {
                AuthenticationScheme = "foo",          
                LoginPath = new PathString("/user/forbidden"),
                AccessDeniedPath = new PathString("/user/forbidden"),
                AutomaticAuthenticate = true,
                AutomaticChallenge = true
            });
            
            

我的控制器需要返回json数据,加了[Authorize]的部分如果没登陆的话AccessDeniedPath 好像从来不会跳到,然后我把LoginPath也改成一样,倒是返回json数据了,可url也跳转了,还携带了return url信息.我的需求是加[Authorize]的控制器代码只返回{"error":"need anthorize"}就好,这应该怎么改动?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

终止放荡 2022-09-11 09:10:25

自己重写,下面是api的
/// <summary>

/// 是否具有权限   (已登陆)
/// </summary>
public class LoginValidationAttribute : AuthorizationFilterAttribute
{
    /// <summary>
    /// 是否验证
    /// </summary>
    public bool IsValidataion { get; set; }

    /// <summary>
    /// 构造函数
    /// </summary>
    /// <param name="isValidataion"></param>
    public LoginValidationAttribute(bool isValidataion = true)
    {
        IsValidataion = isValidataion;
    }

    /// <summary>
    /// 验证规则
    /// </summary>
    /// <param name="actionContext"></param>
    public override void OnAuthorization(HttpActionContext actionContext)
    {
        if (IsValidataion)
        {
            var token = HttpContext.Current.Request[RequestConfig.ApiToken];
            var user = new TokenStoreBusiness().GetUserByToken(token);
            var isThrough = user != null;
            if (isThrough)
            {
                RequestStore.User = user;
            }
            else
            {
                HttpResponseMessage messageResp;
                messageResp = actionContext.Request.CreateResponse(System.Net.HttpStatusCode.OK, new ResponseStrApi()
                {
                    ResultCode = ResponseResult.NoAuthorize,
                    Message = "未授权的访问",
                    Data = "未授权的访问"
                });
                actionContext.Response = messageResp;
                RequestStore.Record.StoreAsync(actionContext);
            }
        }
    }

}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文