2016-10-17 12 views
1

Forms認証とカスタムデータベースを使用してユーザーを認証するASP.NET(4.5)Webアプリケーションがあります。クライアントはADFS Active Directoryフェデレーションサービスを使用し、ADFSユーザーを使用してWebアプリケーションにログインしたいと考えています。私は、それらのADFSユーザーをアプリケーション独自のデータベースのカスタムユーザーにマップする方法を理解する必要があります。 ユーザーが自分のアプリのログインページにアクセスしようとすると、ADFSログインにリダイレクトされ、認証されたユーザーはログインページに戻って、認証されたユーザーに関するいくつかの情報にアクセスするオブジェクトを返します私たちのWebアプリケーションのユーザー。 このシナリオで使用できる簡単なコード例を本当にありがとうと思います。具体的には、返されたユーザー/プリンシパルオブジェクトまたは何かに関する情報が必要であり、私たちのデータベースからユーザーを取得するために自分のコードを書き込むよりも、ユーザーおよびおそらくユーザーを所属するグループを一意に識別できます。私は本当にWebアプリケーションをADFSに認識させたくないのですが、私は単純なことをしています。このシナリオではうまくいくでしょう。asp.net WebアプリケーションでカスタムユーザーにマッピングするADFSユーザーユーザー

答えて

0

ADFSにユーザーの身元確認に役立つ追加の申し立てを返させることができます。メール - 詳細はanswerをご覧ください。 一度設定、ADFS-認証されたユーザの電子メールを得るためにあなたのコントローラ内のコード次の使用:

<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> 

が最後にあなたがマップすることができます。

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

はまた、あなたがconfigセクション以下でのクレーム発行者を確認することができます取得した電子メール(または別の主張)によってユーザーをテーブルに追加します。

+0

あなたの答えと素晴らしいリンクをありがとう。 WIF SDKをインストールして既存のWebアプリケーションにSTSリファレンスを追加したので、アクセスしようとしているユーザーがいます。 Login.aspx.csにその資格情報を何とかSTSサービスに渡すにはどうすればよいですか?クレームを調べるために、返されたADFSトークンをどのように取り戻すのですか? – rafskiBob

+0

@rafskiBob標準的なシナリオでは、Webアプリケーションはユーザーのパスワードを直接処理するべきではありません。認証に失敗した場合は、ユーザーをADFSログインページにリダイレクトすることができます。「system.identityModel.services」の設定セクションを参照してください( 'passiveRedirectEnabled =" true "')。ユーザーが認証されると、 'reply'リンクにリダイレクトされます。そして、すべてのクレームは、 'ClaimsPrincipal.Current'に現れ、コントローラ内で使用されます。 –

+0

私はここで全体の概念を誤解しているかもしれません。私のアプリケーションにアクセスするには、ADSトークンで返されたものよりADSF STSによって認証されるようにリダイレクトされたユーザーですか?もしそうなら、どのようにして私のアプリケーションをspcific ADFSにリダイレクトするように設定する必要がありますかSTSはあなたが提供した設定の一部ですか? – rafskiBob

関連する問題