1

私はC#が初めてです。AWS Cognito ユーザープールで .NET IdentityModel を使用しており、ログアウトを機能させようとしています。CreateEndSessionUrl は post_logout_redirect_uri を設定しますが、Cognito は logout_uri を必要とします。パラメータを使用しようとしていextraますが、パラメータ カウントが一致しません。

これが私のコードです:

StringDictionary cognitoParameters = new StringDictionary();
cognitoParameters.Add("client_id", OAuthConfiguration.ClientId);
cognitoParameters.Add("logout_uri", OAuthConfiguration.EndsessionEndpointPath);

var endsessionEndpoint = OAuthConfiguration.Authority.TrimEnd('/') + "/" + OAuthConfiguration.EndsessionEndpointPath;
var requestUrl = new RequestUrl(endsessionEndpoint);
var endSessionUrl = requestUrl.CreateEndSessionUrl(
   idTokenHint: HttpContext.Current.GetToken(OidcConstants.ResponseTypes.IdToken),
   postLogoutRedirectUri: OAuthConfiguration.Host,
   state: null,
   extra: cognitoParameters
);

CreateEndSessionUrl のドキュメントには、「追加のパラメーターは、文字列辞書またはプロパティを持つ任意の他の型のいずれかにすることができます。どちらの場合も、値はキー/値としてシリアル化されます。」と記載されています。どういうわけか、文字列辞書を間違って作成していると思います。

私が得るエラーは次のとおりです。

Message: Parameter count mismatch.

Exception type: System.Reflection.TargetParameterCountException
Stack trace:
at System.Reflection.RuntimeMethodInfo.InvokeArgumentsCheck(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
at System.Reflection.RuntimePropertyInfo.GetValue(Object obj, BindingFlags invokeAttr, Binder binder, Object[] index, CultureInfo culture)
at System.Reflection.RuntimePropertyInfo.GetValue(Object obj, Object[] index)
at IdentityModel.Internal.ValuesHelper.ObjectToDictionary(Object values)
at IdentityModel.Client.RequestUrlExtensions.CreateEndSessionUrl(RequestUrl request, String idTokenHint, String postLogoutRedirectUri, String state, Object extra)
at Indice.Kentico.Oidc.EndSessionOidcHandler.EndSession()
at Indice.Kentico.Oidc.EndSessionOidcHandler.ProcessRequest(HttpContext context)
at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
at System.Web.HttpApplication.ExecuteStepImpl(IExecutionStep step)
at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)

パラメータを適切にフォーマットして含める方法を誰かが理解するのを手伝ってくれextraますか? idTokenHint、postLogoutRedirectUri、または状態を除外できる場合は、実際には必要ありません。

4

1 に答える 1