您如何使用 Active Federation 向 ASP.NET MVC 应用程序进行身份验证?
How can you use Active Federation to authenticate with an ASP.NET MVC application?
我有一个 WPF 应用程序正在 WCF 上使用 WS-Trust Active Federation。当用户登录时,应用程序从 STS 请求一个令牌,缓存它,然后将该令牌提供给所有需要身份验证的 WCF 服务调用。此应用程序还有一个 Web 浏览器视图,该视图指向提供附加功能的 MVC 应用程序。我希望能够像使用 WCF 服务一样使用 MVC 应用程序进行身份验证,并为应用程序提供我用于所有其他服务调用的相同缓存令牌。
我知道如何使用 MVC 应用设置被动联合,但是是否可以使用 Windows Identity Foundation 为 MVC 应用执行主动联合?
不,您不能在不编写自定义代码的情况下执行此操作。您从 STS 获得了一个 SAML 令牌,用于验证您的服务调用(我假设您在这里谈论的是 SOAP 服务)。您不能在 HTTP 请求中传递原始 SAML 令牌以授权使用 WIF 的调用。
ASP.NET MVC 使用 cookie 来保存请求之间的身份验证信息。当 STS 在成功验证后将 SAML 令牌发回 MVC 应用程序时,将设置这些 cookie。
您可以做的是在浏览器控件中使用被动模式身份验证,拦截回发并从中提取 SAML 令牌,然后再将其传递到服务器。然后您可以在您的服务调用中使用拦截的 SAML 令牌(假设它们具有相同的依赖方标识符)。
或者,您可以编写自定义身份验证 HTTP 模块,在其中处理通过授权 HTTP header 传入的 SAML 令牌。请注意,SAML 令牌可能会变得非常大,因为它们通常包含用户所属的所有安全组。
我有一个 WPF 应用程序正在 WCF 上使用 WS-Trust Active Federation。当用户登录时,应用程序从 STS 请求一个令牌,缓存它,然后将该令牌提供给所有需要身份验证的 WCF 服务调用。此应用程序还有一个 Web 浏览器视图,该视图指向提供附加功能的 MVC 应用程序。我希望能够像使用 WCF 服务一样使用 MVC 应用程序进行身份验证,并为应用程序提供我用于所有其他服务调用的相同缓存令牌。
我知道如何使用 MVC 应用设置被动联合,但是是否可以使用 Windows Identity Foundation 为 MVC 应用执行主动联合?
不,您不能在不编写自定义代码的情况下执行此操作。您从 STS 获得了一个 SAML 令牌,用于验证您的服务调用(我假设您在这里谈论的是 SOAP 服务)。您不能在 HTTP 请求中传递原始 SAML 令牌以授权使用 WIF 的调用。
ASP.NET MVC 使用 cookie 来保存请求之间的身份验证信息。当 STS 在成功验证后将 SAML 令牌发回 MVC 应用程序时,将设置这些 cookie。
您可以做的是在浏览器控件中使用被动模式身份验证,拦截回发并从中提取 SAML 令牌,然后再将其传递到服务器。然后您可以在您的服务调用中使用拦截的 SAML 令牌(假设它们具有相同的依赖方标识符)。
或者,您可以编写自定义身份验证 HTTP 模块,在其中处理通过授权 HTTP header 传入的 SAML 令牌。请注意,SAML 令牌可能会变得非常大,因为它们通常包含用户所属的所有安全组。