WebForms ベースのアプリケーションで Kentor HttpModule を使用しています。loggin でアサートされた追加情報を取得する必要があります。よくわかりませんが、Kentor は attributeID="userId" のみを解析すると思います。さらにいくつかの属性を取得する必要があります。
これらの値をアプリケーションで使用できるようにするために、Kentor をフォークして変更する必要がありますか? または、それらはどこかに保存されていますか?
Saml2Response の AllAssertionElementNodes メソッドから返された xmlElements のコレクションが表示されますが、アプリでそれらにアクセスする方法がわかりません。
ID にアクセスするには、次の拡張メソッドを使用しています。
public static string GetNameID(this IIdentity identity)
{
var claimsIndentity = identity as ClaimsIdentity;
if (string.IsNullOrWhiteSpace(claimsIndentity)
{
return string.Empty;
}
var providerQuery = from c in claimsIndentity.Claims
where c.Type.EndsWith("/identity/claims/nameidentifier")
select c.Value;
var provider = providerQuery.FirstOrDefault();
return provider;
}
この:
if (User.Identity.IsAuthenticated)
{
userId = User.Identity.GetNameID();
}
なにか提案を?
アップデート
これは適切な解決策だと思います。AcsCommandのProcessResponseメソッド内にsamlResponse InnerXMLがあり、そこから必要なデータを解析したり、追加のクレームを作成したりできます。これで解決策が見つかりました (おそらく私の問題の回避策)。他のよりエレガントなソリューションはありますか?