ADFS を介してサード パーティに対して認証を行う asp.net アプリケーションがあります。認証が成功すると、ユーザーは、ユーザーのクレームがデータベースから取得されるランディング ページにリダイレクトされます。次のコードを使用して、ユーザーのクレームを入力します。
IClaimsPrincipal principal = Thread.CurrentPrincipal as IClaimsPrincipal;
IClaimsIdentity claimsIdentity = (IClaimsIdentity)principal.Identity;
foreach (string claim in customClaims)
{
Claim newClaim = new Claim(ClaimTypes.Role, claim);
claimsIdentity.Claims.Add(newClaim);
}
クレームを設定したら、IClaimsPrincipal をセッションに保存します。ここで物事が奇妙になります。ユーザーがランディング ページから目的のページにリダイレクトされた後、クレームが失われます。次のコードを使用してクレームを照会すると...
IClaimsPrincipal principal= Thread.CurrentPrincipal as IClaimsPrincipal;
IClaimsIdentity claimsIdentity = (IClaimsIdentity)principal.Identity;
foreach (Claim claim in claimsIdentity.Claims)
{
Response.Write(claim.ClaimType + ": " + claim.Value + "<br/>");
}
...追加されたクレームは返されません。代わりに、ADFS (ユーザー名) から与えられた元の要求のみを持っています。奇妙なことに、セッションから IClaimsPrincipal を取り出して、それがクレームのコレクションであるとクエリを実行すると、追加したすべてのクレームが返されます。ここで何が起こっているのですか?