16

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

位于http://mywebsite.com的 MVC 网站

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

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

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

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

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

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

图表

4

2 回答 2

9

虽然 JSONP 也可以考虑使用CORS ,但这里有一些 WebApi 实现示例。

考虑为你的代币遵循一个标准(至少是一个草案),而不是创建你自己的。Json Web Token (JWT) 似乎是一种很好的方法,这里的规范包括格式并确定加密或签名方法。有一些库支持这种令牌,例如Thinkteckture 身份模型 ,本文介绍了该库和 JWT 的一些用法。谷歌在这里有一个很好的开发指南。

免责声明,只考虑上面阅读了一些关于 OAuth 和 JWT 标准化批评的内容。

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

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

同意您的观点,委托处理程序是放置令牌验证的好地方。在堆栈中调用 ActionFilter 的时间比必要的晚得多,中间立场是实现System.Web.Http.AuthorizeAttribute

于 2012-12-10T12:30:08.343 回答
1

token solution sounds good.

Get the authentication token from MVC application, you can send that token with each API request in some custom header. Create an ActionFilterAttribute and in OnActionExecuting you can verify the token and act accordingly.

于 2012-12-10T09:18:26.063 回答