我正在寻找以下场景的好主意/资源/实施
MVC网站http://mywebsite.com
上的Webapi REST服务重要信息 - 请注意单独的域/应用程序..
用户登录网站,并通过JSONP / CORS从API获取数据
显然,我不希望用户使用基本身份验证在webapi上进行身份验证。但API也暴露于Android / IOS应用程序,所以我需要基本的身份验证
我考虑过从MVC站点返回一个令牌,然后在webapi站点写一个DelegatingHandler来使用该令牌进行身份验证,但我想要一些输入,或者甚至是更好的解决方案
我为这个事件做了一个漂亮的图表:
答案 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中,您可以验证令牌并采取相应的行动。