0

我有一个配置为使用 ACS 登录的 SharePoint 2010 站点。并且 ACS 配置为使用我自己的身份提供程序。我还有一个 MVC Web 应用程序,它也支持声明,并使用 ACS 进行身份验证。想法是使用我构建的 web 服务将某些服务从 sharepoint 公开到 MVC 站点。

这是一个想法图:

我的想法是,一旦您登录到 MVC 站点,您就可以使用该 SAML 令牌(身份)登录到 SharePoint(我只是将 SAML 令牌传递给 Web 服务,并且该服务尝试使用该令牌登录到 SharePoint )。我希望,因为我在 ACS 中配置了依赖方(MVC 站点,SharePoint)以使用相同的证书进行签名,即使它来自不同的领域,它也会接受令牌。但事实并非如此。所以我想知道我的网络服务如何用我的声明来冒充用户。我一直在做无休止的研究,我非常相信这是不可能的。真正的问题是,SharePoint 是否有办法信任我在 MVC 网站上获得的令牌,而无需构建整个 STS 并让 SharePoint 与之建立信任关系。任何帮助和想法将不胜感激。

4

1 回答 1

0

如果您信任为 MVC 或 SharePoint 创建的令牌,那么您的 Web 服务是该“领域”的一部分,因此可以将该领域添加为有效领域。观众 uri 验证可以从配置或代码中更改。你在使用 WCF 吗?您是否将 WIF 与 WCF 一起使用?

<audienceUris>
   <add value="your:sharepoint-and-mvc:realm" />
   <add value="http://webservice" />
</audienceUris>

编辑:再次阅读您的问题和您所做的说明,您将遇到 SharePoint 问题,因为他们有一个 STS,它将对原始 ACS 令牌进行一些转换并使用自己的密钥再次对其进行签名。这意味着您无权访问原始 ACS 令牌。我在这里看到两个选项:

  • 在使用服务之前创建自己的令牌(您可以使用 SimpleWebTokens 或 JsonWebTokens,它们更易于实现和共享对称密钥)。
  • 将您的服务配置为信任由 ACS 或 SharePoint 密钥以及受众 URI 签名的 SAML 令牌。

由于这是一个 REST 服务,我将使用选项 1,将原始令牌转换为 JSON Web 令牌,使用您自己的密钥退出并将令牌附加到授权标头。

在这里,您有一个 JsonWebTokens (JWT) http://nuget.org/packages/JWT的实现

这是 SimpleWebTokens http://nuget.org/packages/netfx-Microsoft.IdentityModel.Swt的实现

您也可以将 JWT 与带有 x509 证书的非对称加密一起使用(虽然它没有在该包中实现)

于 2012-09-13T20:02:11.013 回答