ここで説明されている.Net 4.5ライブラリ用のこのJSON Webトークンハンドラーを実装しました:
アプリケーションに JWT トークンを返すはずの ACS サービスがあります。ただし、アプリに返されるトークンを取得する必要がある時点 (ブラウザーが証明書利用者のリターン URI にリダイレクトされるとき) で、代わりに次の例外が発生します。
WIF10200: 単一パラメーターの GetIssuerName はサポートされていません。呼び出し: 'GetIssuerName( SecurityToken securityToken, string issuer )'。
これは私のコードに直接問題があるとは思いません。ソリューション全体の検索を行うと、「GetIssuerName」がソリューションに含まれていないためです。WIF が信頼したい証明書の発行者と関係があるのではないかと思いますが、ACS サイトの FederationMetadata から証明書をインポートする方法については、上記でリンクした記事の指示に従いました。 1。
不思議なことに、Relying Party トークン タイプを JWT から SAML 1 または 2 に変更すると、Relying Party の Return Uri がヒットすることはなく、エラーなしで自分のレルムにリダイレクトされるだけです。私は最終的にリターンウリに着陸することを期待しています。誰かが私にどちらかの現象を説明できれば、それは非常に役に立ちます!
アップデート
.NET 4.5 の GetIssuerName メソッドは、System.IdentityModel.Tokens.ValidatingIssuerNameRegistry クラスの一部です (同じメソッドを持つ System.IdentityModel.Tokens.ConfigurationBasedIssuerNameRegistry クラスもありますが、それは私が使用しているものではありません)。
メタデータを見ると、クラスにはこの名前のオーバーライドされたメソッドが 2 つあります。
public override string GetIssuerName(SecurityToken securityToken);
public override string GetIssuerName(SecurityToken securityToken, string requestedIssuerName);
以下のスタック トレースからわかるように、WIF から取得しているエラーは、そこにリストされている最初のメソッドから直接発生しているようです。証明書利用者が JWT を返すと、どこかで 2 番目のメソッドが呼び出されているはずです。このメソッドのシグネチャには 2 番目のパラメーターがありますが、最初のメソッドが呼び出されています。変更方法を知りたいです。
[NotSupportedException: WIF10200: 単一パラメーターの GetIssuerName はサポートされていません。呼び出し: 'GetIssuerName(SecurityToken securityToken, string issuer
) '
。
.IdentityModel.Tokens.JWT.JWTSecurityTokenHandler.ValidateToken(JWTSecurityToken jwt, TokenValidationParameters validationParameters) +278
Microsoft.IdentityModel.Tokens.JWT.JWTSecurityTokenHandler.ValidateToken(SecurityToken トークン) +2248
System.IdentityModel.Tokens.SecurityTokenHandlerCollection.ValidateToken(SecurityToken トークン) +135
System.IdentityModel.Services.TokenReceiver.AuthenticateToken(SecurityToken トークン、ブール値の ensureBearerToken、文字列 endpointUri) +502
System.IdentityModel.Services.WSFederationAuthenticationModule.SignInWithResponseMessage(HttpRequestBase リクエスト) + 1508
System.IdentityModel.Services.WSFederationAuthenticationModule.OnAuthenticateRequest(オブジェクト送信者、EventArgs 引数)
+700 System.Web.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +80 System.Web.HttpApplication.ExecuteStep(IExecutionStep ステップ、ブール値&完了同期) +165