ADFS用户用户映射到asp.net Web应用程序中的自定义用户

时间:2016-10-17 05:10:55

标签: c# asp.net adfs mixed-authentication

我们有一个ASP.NET(4.5)Web应用程序,使用Forms身份验证和自定义数据库来验证用户。我们的客户端使用ADFS Active Directory联合身份验证服务,并希望使用ADFS用户登录我们的Web应用程序。我需要弄清楚如何将这些ADFS用户映射到应用程序自己的数据库中的自定义用户。 当用户尝试访问我的应用程序登录页面时,他们会被重新定向到ADFS登录页面,一旦经过身份验证,就会返回到我的登录页面以及一个对象,该对象可以访问有关经过身份验证的用户的一些信息,然后我需要将其映射到用户在我们的网络应用程序 我非常感谢可以在这种情况下使用的简单代码示例。特别需要有关用户/主体对象的信息,或者我可以使用哪些信息来唯一地标识用户以及可能用户所属的组,而不是编写我的代码以从我们的数据库中获取用户。我真的不想让网络应用程序ADFS知道,但我在简单的事情之后。这适用于这种情况。

1 个答案:

答案 0 :(得分:0)

您可以让ADFS返回有助于识别用户身份的其他声明,例如:电子邮件 - 有关详情,请参阅此answer。 配置完成后,在控制器中使用以下代码来获取ADFS认证用户的电子邮件:

public static string GetAuthenticatedUserEmail()
{
    return ClaimsPrincipal.Current?.Identity?.IsAuthenticated ?? false
           ? ClaimsPrincipal.Current.Claims
             .SingleOrDefault(claim => claim.Type == ClaimTypes.Email)
             ?.Value
           : null;
}

您还可以通过以下配置部分验证声明发布者:

<system.identityModel>
  <identityConfiguration>
    ...
    <certificateValidation certificateValidationMode="PeerOrChainTrust" />
    <issuerNameRegistry type="System.IdentityModel.Tokens.ValidatingIssuerNameRegistry, System.IdentityModel.Tokens.ValidatingIssuerNameRegistry">
      <authority name="http://your-adfs-domain.com/adfs/services/trust">
        <keys>
          <add thumbprint="the thumbprint" />
        </keys>
        <validIssuers>
          <add name="http://your-adfs-domain.com/adfs/services/trust" />
        </validIssuers>
      </authority>
    </issuerNameRegistry>
  </identityConfiguration>
</system.identityModel>
<system.identityModel.services>
  <federationConfiguration>
    <wsFederation issuer="https://your-adfs-domain.com/adfs/ls" realm="https://your-service-domain.com"
                  requireHttps="true" reply="https://your-service-domain/StartPage" passiveRedirectEnabled="true" />
    <serviceCertificate>
      <!-- The sertificate should have a private key -->
      <certificateReference x509FindType="FindBySubjectName" findValue="some subject" storeLocation="LocalMachine" storeName="My" />
    </serviceCertificate>
  </federationConfiguration>
</system.identityModel.services>

最后,您可以通过检索到的电子邮件(或其他声明)将用户映射到您的表格。