ADFS用户映射到自定义用户在asp.net web应用程序

本文关键字:用户 net web 应用程序 asp 自定义 映射 ADFS | 更新日期: 2023-09-27 18:13:16

我们有一个ASP。NET (4.5) web应用程序,使用表单身份验证和自定义数据库来验证用户。我们的客户端使用ADFS活动目录联合服务,并希望使用ADFS用户登录到我们的web应用程序。我需要弄清楚如何将这些ADFS用户映射到应用程序自己的数据库中我们的自定义用户。当用户试图访问我的应用程序登录页面时,他们会被重定向到ADFS登录页面,一旦经过身份验证,就会返回到我的登录页面,同时返回一个对象,该对象可以访问有关经过身份验证的用户的一些信息,然后我需要将这些信息映射到我们的web应用程序中的用户。我真的很欣赏一个简单的代码示例,它可以用于此场景。特别需要关于用户/主体对象的信息或传递回来的东西,我可以用它来唯一地标识用户,可能是用户所属的组,而不是编写代码从我们的数据库中获取用户。我真的不想让web应用程序ADFS意识到,但我追求一些简单的东西。

ADFS用户映射到自定义用户在asp.net web应用程序

你可以让ADFS返回一个额外的声明,这将有助于识别用户,例如电子邮件-查看这个答案的详细信息。配置完成后,在控制器中使用以下代码获取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>

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