我有一个WEB API服务,我打算用于从浏览器到移动应用程序到Windows桌面客户端的客户端。我遇到的所有授权示例和文档都与使用声明(只能使用从浏览器发送的cookie一起工作?)以及控制对MVC控制器上某些操作方法的访问权限相关。
如何在Web api环境中为不仅仅是浏览器的客户端使用此类声明?我目前正在使用基本上由我的网站生成的令牌,因此我会在每次向web api发出请求时发布令牌。这目前仅适用于身份验证。但我不希望每个登录用户都能从html中获取该令牌,并对其他无法访问的Web api方法进行服务调用。我不希望通过这样的" hack"
提供这些数据有关如何完成此操作的任何想法,或者我在此处的文档中遗漏了哪些内容?
修改
我想我应该提一下。我不想将Entity Framework用于任何用户管理。不知何故,EF似乎与所有在线示例中的所有用户和索赔管理紧密集成。
答案 0 :(得分:1)
对于Web API,您必须使用OAuth 2.0持有者访问令牌,对于MVC,您必须使用Cookie,不要在两者之间混合,Web API将为您的移动客户端提供服务,SPA应用程序和MVC将为您的Web应用程序提供服务你打算建一个。您可以在此处阅读detailed 5 blog posts,其中介绍了如何使用Web API和身份构建简单的授权服务器。
答案 1 :(得分:1)
我将尝试将您的问题分解为几个要考虑的关键组件。这是一个很大的主题,您可以将选项和变体应用于每个区域。如果您有Pluralsight帐户(或可以免费试用),我建议您查看Dominick Baier的优秀Web API v2安全课程:http://www.pluralsight.com/courses/webapi-v2-security。
根据您支持一系列客户的需求,我建议您使用OAuth 2.0协议作为起点,并解释更多。
认证。 OAuth 2不是身份验证协议,也没有规定应用程序如何处理身份验证。您可以选择使用任何安全方法,包括Enterprise Library应用程序块。 OAuth 2和不同客户端类型的一种常用方法是使用基于标准Web的登录页面,使用ASP.NET表单身份验证生成基于cookie的身份验证令牌。可以通过令牌发布端点将此cookie交换为OAuth 2承载令牌,如下所述。
令牌生成。在生成用于调用受保护API的安全令牌时,需要考虑许多安全问题。我鼓励使用现有的库或包来创建所谓的OAuth 2"授权服务器"安全地生成这些令牌。这可能包括使用ASP.NET身份(http://www.asp.net/aspnet/overview/owin-and-katana/owin-oauth-20-authorization-server),自托管第三方授权服务器(https://github.com/thinktecture/Thinktecture.IdentityServer.v3)或第三方托管授权服务器(http://msdn.microsoft.com/library/hh147631.aspx)。
批准。这是使用OAuth 2承载令牌处理用户级授权的两种主要方式。第一种是在令牌本身中嵌入声明或其他授权数据,第二种是使用令牌执行检索以检索此授权数据。如果基于角色的授权足以满足您的需求,您可能需要考虑将每个角色作为单独的声明包含在已颁发的令牌中。这可能是最简单的解决方案,允许使用[Authorize]属性来装饰Web API控制器和操作以强制执行授权:http://msdn.microsoft.com/en-us/library/system.web.http.authorizeattribute%28v=vs.118%29.aspx。
应用程序管理。 OAuth 2协议要求为每个应用程序(通常是每个客户端类型)分配一个标识符和密钥。这些申请如何注册"并且分配这些凭据由您自己决定,但通常由授权服务器库或服务处理。
令牌管理。 OAuth 2承载令牌的生命周期通常较短,一旦到期必须重新签发。使这更容易的功能被称为"刷新令牌"并允许客户自动回收他们的承载令牌,以确保他们有一个活动的。
您现在可能比开始时有更多问题。我建议花些时间使用像ASP.NET身份文档和示例上面提到的Pluralsight课程这样的资源。您可能需要根据需要选择特定元素,以便更好地了解每个组件如何适应更大的图景。