web-dev-qa-db-ja.com

ASP.NETCoreのOpenIdConnectOptionsでredirect_uriパラメーターを設定する方法

OpenIdを使用してASP.NETアプリケーションをSalesforceに接続しようとしています。現在、これが私の接続コードです。もう一方の端の値と正確に一致する必要があるredirect_uriパラメーターを除いてすべてを取得したと思います。

 app.UseCookieAuthentication(x =>
        {
            x.AutomaticAuthenticate = true;
            x.CookieName = "MyApp";
            x.CookieSecure = CookieSecureOption.Always;
            x.AuthenticationScheme = "Cookies";

        });

        JwtSecurityTokenHandler.DefaultInboundClaimTypeMap = new Dictionary<string, string>();


        app.UseOpenIdConnectAuthentication(x =>
        {
            x.AutomaticAuthenticate = true;
            x.Authority = "https://login.salesforce.com";
            x.ClientId = "CLIENT_ID_HERE";
            x.ResponseType = "code";
            x.AuthenticationScheme = "oidc";
            x.CallbackPath = new PathString("/services/oauth2/success");
            //x.RedirectUri = "https://login.salesforce.com/services/oauth2/success";
            x.Scope.Add("openid");
            x.Scope.Add("profile");
            x.Scope.Add("email");                
        });

ただし、RedirectUriは渡す有効なパラメーターではありません。それを設定する正しい方法は何ですか?

10
Valyrion

_redirect_uri_は、現在のリクエストから抽出されたスキーム、ホスト、ポート、パス、および指定したCallbackPathを使用して、自動的に計算されます。

_x.RedirectUri = "https://login.salesforce.com/services/oauth2/success"_は非常に疑わしいように見えます(Salesforceで作業している場合を除く):認証フローが完了したときにユーザーエージェントがリダイレクトされるコールバックURLであり、IDプロバイダーの承認エンドポイントではないことを忘れないでください。

したがって、あなたの場合、ユーザーはhttp(s)://yourdomain.com/services/oauth2/successにリダイレクトされます。 Salesforceオプションに登録したアドレスですか?

11
Kévin Chalet

OnRedirectToIdentityProviderをリッスンするイベントを設定する必要があります

あなたの場合:

x.Events.OnRedirectToIdentityProvider = async n =>
{
    n.ProtocolMessage.RedirectUri = <Redirect URI string>;
    await Task.FromResult(0);
}
7
Pedro.The.Kid