2

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があり、そこから必要なデータを解析したり、追加のクレームを作成したりできます。これで解決策が見つかりました (おそらく私の問題の回避策)。他のよりエレガントなソリューションはありますか?

4

1 に答える 1

2

Kentor.AuthServices SP は、アサーションのすべての属性をクレームに変換します。メソッドにブレークポイントを設定しGetNameID、列挙を調べると、claimsIdentity.Claimsすべての属性がそこにあるはずです。そうでない場合は、AuthService github ページで問題を報告してください。

于 2015-03-06T09:04:02.717 に答える