mvc和webapi之间的身份验证(单独的域/应用程序)

时间:2012-12-10 07:18:50

标签: c# asp.net-mvc authentication cross-domain asp.net-web-api

我正在寻找以下场景的好主意/资源/实施

MVC网站http://mywebsite.com

http://myapi.com

上的Webapi REST服务

重要信息 - 请注意单独的域/应用程序..

用户登录网站,并通过JSONP / CORS从API获取数据

显然,我不希望用户使用基本身份验证在webapi上进行身份验证。但API也暴露于Android / IOS应用程序,所以我需要基本的身份验证

我考虑过从MVC站点返回一个令牌,然后在webapi站点写一个DelegatingHandler来使用该令牌进行身份验证,但我想要一些输入,或者甚至是更好的解决方案

我为这个事件做了一个漂亮的图表:

Diagram

2 个答案:

答案 0 :(得分:9)

虽然JSONP也考虑使用CORS一些WebApi实现的例子here

请考虑为您的令牌遵循标准(至少是草稿),而不是创建自己的令牌。 Json Web Token(JWT)似乎是一个很好的方法,规范here包括格式并确定加密或签名方法。有些库支持这种令牌,例如Thinkteckture Identity Model this article涵盖了该库和JWT的一些用法。谷歌有一个很好的开发指南here

免责声明,只考虑以上内容,了解了部分OAuth和JWT标准化criticisms

如果您确实使用了HTTP标头,我不确定need a custom header(@Vipul)是否有“授权:”标题可用于此类信息。

如果您使用自定义令牌,请确保其具有过期日期,如果您想要防止重放攻击并使用众所周知的算法进行签名或加密,请考虑使用nonce

同意您delegating handler是放置令牌验证的好地方。一个ActionFilter调用很多later than necessary in the stack,中间地带是实现System.Web.Http.AuthorizeAttribute

答案 1 :(得分:1)

令牌解决方案听起来不错。

从MVC应用程序获取身份验证令牌,您可以在每个自定义标头中发送带有每个API请求的令牌。创建一个ActionFilterAttribute,在OnActionExecuting中,您可以验证令牌并采取相应的行动。