[英]Implementing Authentication and role based authorization in ASP.NET MVC web API service and MVC client architecture
在为我的Web API(服务)-MVC(客户端)体系结构项目实施身份验证/授权方案时,我很难决定一种方法。 即使我已经在Web API项目中实现了基于自定义令牌的身份验证,但我仍然很难在哪里确切地实现授权(在客户端或在API本身中)。
架构概述:
已实施身份验证:
Web API中的基于令牌的身份验证(使用消息处理程序)-它为经过身份验证的用户生成SHA1加密令牌,该令牌需要成为每个HTTP请求标头中的一部分。
(令牌=用户名+用户IP)
受SSL保护的HTTP请求。 (同样,使用消息处理程序)
当前问题:
我希望,在考虑整个身份验证/授权概念的同时,我没有做错任何事情。 因此,我将不胜感激任何替代方法/建议。
首先,我认为发明自己的身份验证机制绝不是一个好主意。
要回答您当前的问题:
1通常来说,您总是希望使用身份验证来保护Api,因为它是您访问数据的地方。 您的客户端(MVC应用程序/智能手机)应授权自己访问您的Api。
2&3因为您使用的是REST Api,所以我建议保持Api无状态,换句话说,不要保留任何会话信息。 只需在令牌中包括所需的角色数据即可。 例如,您可以使用JSON Web令牌 。
4我将始终使用授权标头发送授权数据。 在您的DelegatingHandler中(请注意不同的MessageHandler MVC,DelegatingHander HTTP),您可以通过simpy检索标头。
protected override Task<HttpResponseMessage> SendAsync(
HttpRequestMessage request, CancellationToken cancellationToken)
{
var authorizationHeader = request.Headers.Authorization;
// Your authorization logic.
return base.SendAsync(request, cancellationToken);
}
有关如何在ajax调用中包括授权标头的更多信息,请参见: 如何在jQuery和AJAX中使用Basic Auth?
额外信息:
如果您是我,我还将看一下Thinktecture的Identity Server: https : //github.com/thinktecture/Thinktecture.IdentityServer.v2
也许这个答案关于REST服务的身份验证将帮助您还有: REST服务认证
为什么要创建一个完整的令牌系统(除非您使用某种联合安全性),否则您将具有表单身份验证和cookie,一旦设置并返回cookie,浏览器就会将cookie与SPA发出的所有AJAX请求一起发送给cookie。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.