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

我正在为以下场景寻找好的想法/资源/实现

MVC网站http://mywebsite.com

http://myapi.com上的 Webapi REST服务

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

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

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

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

我为这个场景做了一个漂亮的图表:

图

虽然JSONP的工作原理也考虑使用CORS的一些WebApi实现示例。

请考虑遵循标记(至少是草稿)而不是创建自己的标记。 Json Web Token(JWT)似乎是一个很好的方法, 这里的规范包括格式并确定加密或签名方法。 有一些库可以支持这种令牌,例如Thinkteckture Identity Model, 本文将介绍该库和JWT的一些用法。 谷歌在这里有一个很好的开发指南。

免责声明,只考虑上述内容已经阅读了部分OAuth和JWT标准化批评 。

如果您确实使用了HTTP标头,我不确定您是否需要自定义标头 (@Vipul),“Authorization:”标头可用于此类信息。

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

同意委托处理程序是放置令牌validation的好地方。 ActionFilter 在堆栈中被调用的时间要晚得多 ,中间地带将实现System.Web.Http.AuthorizeAttribute 。

令牌解答听起来不错。

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