没有身份的令牌授权

时间:2016-12-05 17:33:06

标签: asp.net-web-api

我打算将以下代码用于我的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>

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

1 个答案:

答案 0 :(得分:0)

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

我碰巧有关于这个主题的大量文章,我希望它可以帮助你更多地了解这个主题。通过各种方式,做自己的研究,找到其他资源,看看使用声明,但不要尝试快捷这些事情,因为你最终会得到一些不安全的东西。

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