【问题标题】:Authentication between mvc and webapi (Separate domains/Applications)mvc 和 webapi 之间的身份验证(单独的域/应用程序)
【发布时间】:2012-11-27 14:35:15
【问题描述】:

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

一个 MVC 网站http://mywebsite.com

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

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

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

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

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

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

【问题讨论】:

  • 你有什么问题?令牌解决方案听起来不错。
  • A user logs in at the website and data is fetched from the API via AJAX - 如果 WebAPI 位于不同的域中,这会如何发生?
  • @DanteisnotaGeek 问题是:“但我想要一些输入,或者甚至更好的解决方案”
  • @DarinDimitrov 我不关注你。问题是应用程序之间的身份验证,这是问题所在。
  • 但是@DarinDimitrov 有一个观点。跨域 AJAX 请求是不可能的,不管有没有身份验证。

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


【解决方案1】:

虽然 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),感谢您解释详细信息。
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 2016-06-17
    • 2014-11-12
    • 1970-01-01
    • 1970-01-01
    • 2013-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-06
    相关资源
    最近更新 更多