我计划将下面的代码用于我的 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>
顺便说一句,我为我的英语感到抱歉。我希望你能理解我的问题,我正在等待你的建议。