【问题标题】:Token authorization without identity无身份令牌授权
【发布时间】:2017-04-20 04:28:45
【问题描述】:

我计划使用下面的代码来确保我的 web api 安全,但我不确定这是否足够安全和​​合乎逻辑的方式。我不想使用 OWIN 和 AspNet.Identity,因为它对我来说非常复杂,我不完全理解,我不知道如何自定义数据库表、用户角色等。但我的方式很简单,而且非常可定制我。

这是 CustomAuthorizeAttribute;

public class CustomAuthorize : AuthorizeAttribute
{
    public override void OnAuthorization(HttpActionContext actionContext)
    {
        if ((actionContext.Request.Headers.GetValues("Host").FirstOrDefault().Contains("localhost:15742")))
        {
            IEnumerable<string> access_token;
            if (actionContext.Request.Headers.TryGetValues("Authorization", out access_token))
            {
                var user = GetUserByToken(access_token);
                if (user!=null && !user.TokenIsExpired)
                {
                    HttpContext.Current.Response.AddHeader("WWW-Authenticate", "Custom " + access_token.FirstOrDefault());
                    return;
                }
                else
                {
                    actionContext.Response = actionContext.Request.CreateResponse(HttpStatusCode.Unauthorized);
                    HttpContext.Current.Response.AddHeader("WWW-Authenticate", "Custom");
                    return;
                }
            }
            else
            {
                actionContext.Response = actionContext.Request.CreateResponse(HttpStatusCode.Unauthorized);
            }
        }
        else
        {
            actionContext.Response = actionContext.Request.CreateResponse(HttpStatusCode.Forbidden);
        }
    }
}

这是前端使用

<script type="text/javascript">
    $(function () {
        var access_token = $.cookie('access_token');
        if (access_token == undefined) {
            $.cookie('access_token', 'test-token');
        }


        $.ajax({
            url: '/api/account',
            headers: { access_token: access_token },
            success: function (data) {
                document.write(data.name + " " + data.lastname);
            }
        });
    });
</script>

顺便说一句,我为我的英语感到抱歉。我希望你能理解我的问题,我正在等待你的建议。

【问题讨论】:

  • 当人们由于缺乏知识/不正确的假设而自己构建东西并且不想花时间学习作为依赖的框架时,这让我感到害怕。乍一看,一切似乎都很复杂。潜入一点并学习。此外,您没有必须使用 db 进行令牌身份验证。请阅读并至少尝试一下:offering.solutions/articles/asp-net/…
  • 链接断开或站点关闭
  • 嗯在这里工作。你得到了 404?
  • 这就是我想要的!OWIN 和 AspNet.Identity 太复杂了!我只是想在 header 中添加 access_token ,然后在后端检查,就是这样,为什么这么复杂

标签: asp.net-web-api


【解决方案1】:

我建议你花时间学习做这些事情的正确方法。使用库是有原因的,这是为了确保您不会创建容易破解的东西。安全对于此类事情至关重要。

我碰巧有一篇关于这个主题的广泛文章,我希望它可以帮助你更多地了解这个主题。无论如何,也要进行自己的研究,寻找其他资源,例如考虑使用 Claims,但不要试图简化这些事情,因为你最终会得到一些根本不安全的东西。

希望这会有所帮助:https://eidand.com/2015/03/28/authorization-system-with-owin-web-api-json-web-tokens/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-07-01
    • 2020-06-17
    • 2018-11-08
    • 2021-03-25
    • 1970-01-01
    • 2017-12-10
    • 1970-01-01
    • 2015-10-02
    相关资源
    最近更新 更多