2

我正在尝试做这样的事情:

  1. 我有一个 MVC4 Web 应用程序和一个 Web-API 服务(托管在 azure 中的两个不同角色上)
  2. 另一个角色运行 CustomSTS1。
  3. MVC Web 应用信任 CustomSTS1
  4. 现在客户登录到他被重定向到 STS 登录页面的站点。
  5. 登录后,他将被重定向回 MVC 网站。
  6. 从这个网站,客户执行操作,然后调用 web-API 服务。

我在 Web 应用程序中有 SAML 令牌,我将其传递给 WebAPI 服务。

现在,当我尝试在 Web API 端验证 SAML 令牌时,我得到一个

Message=ID1032: At least one 'audienceUri' must be specified in the SamlSecurityTokenRequirement when the AudienceUriMode is set to 'Always' or 'BearerKeyOnly'. Either add the valid URI values to the AudienceUris property of SamlSecurityTokenRequirement,  or turn off checking by specifying an AudienceUriMode of 'Never' on the SamlSecurityTokenRequirement.

这没有 Web API 服务信任 CustomSTS1

设置信任后,每当我尝试向 WEB API 服务发出 HTTP Get 请求时,总是会收到 HTTP 401: UNAUTHORIZED。

现在,我的问题是,(我知道我目前的方法肯定是错误的)

  1. 如何设置与 CustomSTS1 的信任关系,以便 WebAPI 服务能够代表登录到 MVC 站点的用户执行 ActAS?

或者

  1. 这个架构错了吗?
  2. 还有另一种方法可以实现这一目标吗?
4

1 回答 1

1

这种方法在概念上是错误的。MVC 应用程序应使用 ActAs 协商 STS 中 Web API 的新令牌。这就是它传统上适用于 SOAP 服务的方式。然而,Web API 正在远离 SAML,因为它是一种依赖于不同 WS-* 规范的复杂格式。如果您想在该级别支持 SSO,OAuth 2.0 正在成为该领域的标准。

另一种方法是在 MVC 应用程序和 Web API 之间建立隐式信任,因此从 MVC 应用程序对 Web API 的所有调用都是通过更标准的 Http 身份验证机制完成的,例如基本身份验证,使用一组特定的凭据,只有MVC 应用程序知道。MVC 应用程序中有关已登录用户的信息作为附加信息传递。

问候,巴勃罗。

于 2013-03-06T14:45:31.373 回答