Forms WIF单点登录和表单身份验证

Forms WIF单点登录和表单身份验证,forms,authentication,single-sign-on,wif,Forms,Authentication,Single Sign On,Wif,我有一个基于表单身份验证的现有应用程序。我想在我的应用程序中启用可选的单点登录。我想在附加的登录页面(login_sso.aspx)上创建一个,该页面将使用STS对用户进行身份验证,如果用户身份验证成功,那么它将创建一个forms auth cookie,这样应用程序的其余部分将在不做任何更改的情况下工作。在我的访问群体uri中,我将使用login_sso.aspx页面 <audienceUris> <add value="https://www.myapp.com/login

我有一个基于表单身份验证的现有应用程序。我想在我的应用程序中启用可选的单点登录。我想在附加的登录页面(login_sso.aspx)上创建一个,该页面将使用STS对用户进行身份验证,如果用户身份验证成功,那么它将创建一个forms auth cookie,这样应用程序的其余部分将在不做任何更改的情况下工作。在我的访问群体uri中,我将使用login_sso.aspx页面

<audienceUris>
<add value="https://www.myapp.com/login_sso.aspx" />
</audienceUris>

为此,我必须保持authentication mode=“None”,但我原来的登录页面将无法工作,如果我保持authentication mode=“Forms”,那么我的登录\u sso.aspx将不会重定向到STS。仅当我将身份验证模式设置为“无”时,它才起作用


这方面有什么办法吗?在这里,我可以保持我的身份验证模式=“Forms”,并且仍然使用STS(仅用于登录\u sso.aspx)

有许多解决方案。要考虑的是“可选SSO”的意思。如果您的意思是,除了您自己的用户名/密码之外,您的应用程序现在还将接受来自第三方提供商(客户的STS或LiveID或谷歌ID)的身份;最干净、最优雅的方法是:

  • 声明可启用您的应用程序(如果您今天使用Forms AuthN,将 可能对您的代码没有影响)
  • 引入一个STS(你自己的),它将既是一个“联盟” “提供商”(意思是它将是你的应用程序和所有应用程序之间的桥梁 第三方身份验证人);以及身份提供者本身 (像现在一样对用户进行身份验证)
  • 1是相对容易的。对于#2,您需要获得STS。根据您托管的位置,您可能可以使用现成的STS,如ADFS(v2),或者您可能需要一个自定义的STS(例如CodePlex上的IdentityServer)

    一个不太优雅(也不太经得起未来考验)的解决方案可能需要对WIF进行一些编程操作(如中所述)

    顺便说一句,“观众URI”不是你应用程序的URL。这意味着识别STS发行的代币的消费者