身份服务器注册不会重定向回 React 应用程序

IT技术 reactjs asp.net-core identityserver4 openid-connect
2021-05-12 21:46:13

我有一个 ASP.NET Core 后端,其中一个 React 前端托管在不同的来源。

ASP.NET 核心后端配置为使用内置身份服务器:

// Startup
public void ConfigureServices(IServiceCollection services)
{
  ...
  services.AddIdentityServer()
    .AddApiAuthorization<ApplicationUser, ApplicationDbContext>();
  ...
}

我添加了OidcConfigurationController身份服务器期望的:

public class OidcConfigurationController : Controller
{
    public OidcConfigurationController(IClientRequestParametersProvider clientRequestParametersProvider)
    {
        ClientRequestParametersProvider = clientRequestParametersProvider;
    }

    public IClientRequestParametersProvider ClientRequestParametersProvider { get; }

    [HttpGet("_configuration/{clientId}")]
    public IActionResult GetClientRequestParameters([FromRoute]string clientId)
    {
        var parameters = ClientRequestParametersProvider.GetClientParameters(HttpContext, clientId);
        return Ok(parameters);
    }
}

我还添加了以下设置,appsettings.json以便身份服务器读取:

...
"IdentityServer": {
  "Clients": {
    "WebApplication1": {
      "Profile": "SPA",
      "RedirectUri": "http://localhost:3000/authentication/login-callback",
      "LogoutUri": "http://localhost:3000/authentication/logout-callback"
    }
  }
},
...

React 应用程序托管于ASP.NET Core 服务器http://localhost:3000并用于oidc-client与 ASP.NET Core 服务器进行交互。前端代码似乎在传递正确的返回 url 时正确请求登录:

在此处输入图片说明

ASP.NET Core 身份验证页面成功显示:

在此处输入图片说明

但是如果你发布一个新的注册,ASP.NET Core 会重定向到它的根目录而不是http://localhost:3000

在此处输入图片说明

有没有我遗漏的东西,或者内置的 ASP.NET 标识是否仅在客户端托管在同一来源时才有效?

任何帮助表示赞赏。

1个回答

您只是在往返Account/Register. 这与出身无关。检查纯登录 - 这应该是开箱即用的。

Identityserver 不负责新帐户注册。你必须自己处理。每次重定向时,您都需要传递返回 url,从登录表单上的“注册”按钮开始,到您的[HttpPost]Register操作结束即使您的用户在中间取消注册并决定使用现有帐户登录,您也很可能希望保留该 url。

请参阅问题/答案以获取参考。