从 ASP.NET MVC 到 SharePoint 的联合身份验证
Federated authentication from ASP.NET MVC to SharePoint
场景:
- 我们当前的堆栈是 SharePoint 2013 网络应用程序
- 用户使用基于 ADFS 声明的联合身份验证登录 SP2013:当用户在 SP 站点中单击 "Log In" 时,他们将通过 ADFS 重定向到对用户进行身份验证并使用内置 SP 的身份提供者为了支持联合身份验证,我们获得了一个存储在 SharePoint 安全令牌服务中的 SAML 令牌。用户的浏览器获得一个
FedAuth
cookie(如果我理解正确的话)引用存储在 SharePoint 中的令牌。
- 我们希望逐渐从 SP 迁移到 ASP.NET 基于 MVC 的堆栈
- 这里的关键是逐步迁移:我们想把页面和REST服务从SP一点一点迁移到新的系统中。
例如,URL /thisurl/
应由旧版 SP 应用程序处理,/migratedurl/
应由新的 ASP.NET MVC 应用程序处理。
我有以下 questions/issues:
- 问题 1:我们如何处理新设置中的身份验证?我想象身份验证(即处理用户单击 "Login" link,重定向到 ADFS -> 身份提供程序)仍将由旧版 SP 站点处理。在这种情况下,新的 ASP.NET MVC 应用程序如何访问经过身份验证的用户的声明?
- 问题 2:部署它的最佳方式是什么?新的 ASP.NET MVC 应用程序应该是 SharePoint 网站下的 IIS Web 应用程序吗?或者它应该是一个新的 IIS 网站吗?请记住,ASP.NET MVC 应用程序需要对 SP 站点执行 AJAX 调用,反之亦然。
我对 SharePoint、联合身份、ADFS 等的理解充其量是有限的,因此我对我们系统的描述可能有所欠缺,可能有些地方我理解有误,可能有些术语我不理解等。如果我可以对问题进行更改以使其更清楚,请告诉我。
用 ADFS 术语来说,您拥有的是两个独立的依赖方 (RP),即。 SP 站点和新的 MVC 应用程序。
ADFS 在它们之间应用 SSO。
您的新应用。将基于声明,即您需要通过 WIF(旧的)或 OWIN(新的和闪亮的)添加 WS-Fed 功能。
参考:Use the OWIN Security Components in ASP.NET to Implement Web Sign On with ADFS 一个好的 OWIN/ADFS 示例。
所以发生的是用户登录到 SP。他们现在同时拥有 SP 和 ADFS cookie 集。他们现在登录到 MVC 应用程序。他们没有应用程序。 cookie,以便将它们重定向到 ADFS。 ADFS / OWIN 看到他们有 ADFS cookie,所以创建了应用程序。 cookie 和用户无缝登录。
最干净的部署方法是制作应用程序。一个新的 IIS 网站。
这有两个好处:
- 不依赖于 SP
- 将来很容易迁移到 Azure(只需要一些 web.config 更改)
如果我在评论中的问题的答案是 'yes' 那么您的 MVC 堆栈应该能够访问 FedAuth cookie 并查询联合站点以获取新令牌。
这意味着 MVC 堆栈将在 IIS 的相同级别上托管在 SharePoint 下面。我认为这就是您 Q2 的答案:)
请参阅Sample Federation, delegation and authentication scenarios in SharePoint 2013
特别是联合方案;
Fabrikam 信任域中的客户端向 Contoso 信任域中的信赖方应用程序发送请求。
依赖方将客户端重定向到 Contoso 信任域中的 STS。此 STS 不了解客户端。
Contoso STS 将客户端重定向到 Fabrikam 信任域中的 STS,Contoso 信任域与该 STS 具有信任关系。
Fabrikam STS 验证客户端的身份并向 Contoso STS 颁发安全令牌。
Contoso STS 使用 Fabrikam 令牌创建自己的令牌,并将其发送给依赖方。
依赖方从安全令牌中提取客户的声明并做出身份验证决定。
场景:
- 我们当前的堆栈是 SharePoint 2013 网络应用程序
- 用户使用基于 ADFS 声明的联合身份验证登录 SP2013:当用户在 SP 站点中单击 "Log In" 时,他们将通过 ADFS 重定向到对用户进行身份验证并使用内置 SP 的身份提供者为了支持联合身份验证,我们获得了一个存储在 SharePoint 安全令牌服务中的 SAML 令牌。用户的浏览器获得一个
FedAuth
cookie(如果我理解正确的话)引用存储在 SharePoint 中的令牌。 - 我们希望逐渐从 SP 迁移到 ASP.NET 基于 MVC 的堆栈
- 这里的关键是逐步迁移:我们想把页面和REST服务从SP一点一点迁移到新的系统中。
例如,URL /thisurl/
应由旧版 SP 应用程序处理,/migratedurl/
应由新的 ASP.NET MVC 应用程序处理。
我有以下 questions/issues:
- 问题 1:我们如何处理新设置中的身份验证?我想象身份验证(即处理用户单击 "Login" link,重定向到 ADFS -> 身份提供程序)仍将由旧版 SP 站点处理。在这种情况下,新的 ASP.NET MVC 应用程序如何访问经过身份验证的用户的声明?
- 问题 2:部署它的最佳方式是什么?新的 ASP.NET MVC 应用程序应该是 SharePoint 网站下的 IIS Web 应用程序吗?或者它应该是一个新的 IIS 网站吗?请记住,ASP.NET MVC 应用程序需要对 SP 站点执行 AJAX 调用,反之亦然。
我对 SharePoint、联合身份、ADFS 等的理解充其量是有限的,因此我对我们系统的描述可能有所欠缺,可能有些地方我理解有误,可能有些术语我不理解等。如果我可以对问题进行更改以使其更清楚,请告诉我。
用 ADFS 术语来说,您拥有的是两个独立的依赖方 (RP),即。 SP 站点和新的 MVC 应用程序。
ADFS 在它们之间应用 SSO。
您的新应用。将基于声明,即您需要通过 WIF(旧的)或 OWIN(新的和闪亮的)添加 WS-Fed 功能。
参考:Use the OWIN Security Components in ASP.NET to Implement Web Sign On with ADFS 一个好的 OWIN/ADFS 示例。
所以发生的是用户登录到 SP。他们现在同时拥有 SP 和 ADFS cookie 集。他们现在登录到 MVC 应用程序。他们没有应用程序。 cookie,以便将它们重定向到 ADFS。 ADFS / OWIN 看到他们有 ADFS cookie,所以创建了应用程序。 cookie 和用户无缝登录。
最干净的部署方法是制作应用程序。一个新的 IIS 网站。
这有两个好处:
- 不依赖于 SP
- 将来很容易迁移到 Azure(只需要一些 web.config 更改)
如果我在评论中的问题的答案是 'yes' 那么您的 MVC 堆栈应该能够访问 FedAuth cookie 并查询联合站点以获取新令牌。
这意味着 MVC 堆栈将在 IIS 的相同级别上托管在 SharePoint 下面。我认为这就是您 Q2 的答案:)
请参阅Sample Federation, delegation and authentication scenarios in SharePoint 2013
特别是联合方案;
Fabrikam 信任域中的客户端向 Contoso 信任域中的信赖方应用程序发送请求。
依赖方将客户端重定向到 Contoso 信任域中的 STS。此 STS 不了解客户端。
Contoso STS 将客户端重定向到 Fabrikam 信任域中的 STS,Contoso 信任域与该 STS 具有信任关系。
Fabrikam STS 验证客户端的身份并向 Contoso STS 颁发安全令牌。
Contoso STS 使用 Fabrikam 令牌创建自己的令牌,并将其发送给依赖方。
依赖方从安全令牌中提取客户的声明并做出身份验证决定。