Azure でホストされる MVC 4 アプリケーションを開発しており、認証に ACS サービスを使用したいと考えています。ユーザーが認証されたら、結果のクレームの詳細を使用してローカル レコードに関連付けます。それに続いて、クレームセットを拡張して、アプリケーションが承認の決定に使用するローカル承認を表す追加のクレームを含めたいと思います。原則を置き換える必要があると思いますが、MVC でいつどこでこれを行うべきかがわからず、通常はセッションの存続期間中に使用される認証配管が壊れないようにしたいと考えています。誰でもこれに光を当てることができますか?
2 に答える
クレームセットを強化するための WIF の拡張ポイントは、ClaimsAuthenticationManager です。
ドキュメントから:
クレーム認証マネージャーは、RP アプリケーションが呼び出される前に、IClaimsPrincipal によって提示される一連のクレームをフィルター処理、変更、または新しいクレームを挿入するために使用できる RP 処理パイプラインの拡張ポイントを提供します。
ACS にルールを追加して、必要なクレームでトークンを強化することもできます。
@Eugenio Paceが言ったことに加えて、クレームを追加したり削除したりできることは注目に値しますIClaimsPrincipal
。
public static void UpdateClaims(IClaimsIdentity identity)
{
identity.Claims.Remove(identity.Claims.SingleOrDefault(x => x.ClaimType == ClaimTypes.Name));
identity.Claims.Remove(identity.Claims.SingleOrDefault(x => x.ClaimType == ClaimTypes.Email));
identity.Claims.Add(new Claim(ClaimTypes.Name, "Steve Smith"));
identity.Claims.Add(new Claim(ClaimTypes.Email, "steve@smith.com"));
}
UpdateClaims(User.Identity as IClaimsIdentity);
追加されるクレームは、に列挙されているタイプの1つClaimTypes
、または独自に考案したカスタム文字列のいずれかです。タイプのクレームを複数追加できますClaimTypes.Role
-他のタイプについてはよくわかりません。
ClaimsCollection
ドキュメントから:
単一の主題に関連するクレームのコレクションを表します。
ClaimCollectionにClaimを追加すると、SetSubjectメソッドを呼び出すことにより、そのClaimがコレクションに関連付けられたサブジェクトに暗黙的に関連付けられます。
ClaimCollectionからClaimを削除すると、SetSubjectメソッドも呼び出されて、この関連付けが暗黙的に削除されます。
http://msdn.microsoft.com/en-us/library/microsoft.identitymodel.claims.claimcollection.aspx
アップデート
.Net 4.5では、IDクラスとクレームを更新する方法、および名前空間が変更されました。
using System.IdentityModel;
using System.Security.Claims;
public static void UpdateClaims(Member member, ClaimsIdentity identity)
{
identity.RemoveClaim(identity.Claims.SingleOrDefault(x => x.Type == ClaimTypes.Name));
identity.RemoveClaim(identity.Claims.SingleOrDefault(x => x.Type == ClaimTypes.Email));
identity.AddClaim(new Claim(ClaimTypes.Name, "Steve Smith"));
identity.AddClaim(new Claim(ClaimTypes.Email, "steve@smith.com"));
}
UpdateClaims(User.Identity as ClaimsIdentity);
http://msdn.microsoft.com/en-us/library/system.security.claims.claimsidentity.aspx