身份服务器端点 OIDC

Identity Server Endpoints OIDC

我正在使用身份服务器并将其托管在 IIS 下。直接托管在 http://localhost:44431

下时运行良好

第 1 步: 调用 http://localhost:44431/account/login?returnUrl=/connect/authorize/login?respone_type... 第 2 步: 然后转到授权端点和 return 令牌

在 localhost\id 下托管的问题:

但是,当我在 IIS 上将应用程序部署在默认网站 localhost\id 下时。它停止工作。

第 1 步: 调用 http://localhost/id/account/login?returnUrl=/connect/authorize/login?respone_type...

>> 检查请求 Headers:

>> 响应Header:

>> 在 http://localhost/id/.well-known/openid-configuration

打开 Id 配置
  "authorization_endpoint":"http://localhost/id/connect/authorize",

步骤 2: 调用 /connect/authorize 端点:

>> 检查 Headers:

它不包含 id 虚拟目录,这就是它失败的原因。在这个过程中我必须在哪里解决这个问题?

我无法重现您的问题,但我确实从头开始在 IIS 中托管 IdentityServer4。我遵循的设置步骤如下。

  1. 克隆IdentityServer4.Samples。启动 Quickstarts/3_ImplicitFlowAuthentication 解决方案: https://github.com/IdentityServer/IdentityServer4.Samples/tree/release/Quickstarts/3_ImplicitFlowAuthentication
  2. 在 IIS 中创建了一个应用程序,路径为“/id”,AppPool 设置为 'No Managed Code'
  3. 运行 'dotnet publish' 在 IdentityServer4 项目上并将输出移动到 IIS 应用程序的根文件夹
  4. 将 MvcClient 项目中的权限 URL 更改为指向 localhost/id

    app.UseOpenIdConnectAuthentication(new OpenIdConnectOptions
    {
        AuthenticationScheme = "oidc",
        SignInScheme = "Cookies",
        Authority = "http://localhost/id",
        RequireHttpsMetadata = false,
        ClientId = "mvc",
        SaveTokens = true
    });
    
  5. 加载 MvcClient 应用程序并导航到具有 'Authorize' 过滤器的路由。使用适当的虚拟目录正确发生重定向

通过转到 openid-configuration 页面检查 IdentityServer 是否正在输出正确的路径:http://localhost/id/.well-known/openid-configuration

您 运行 IdentityServer4 和 MVC 应用程序在同一个项目中吗?如果是这样,您是否使用 OpenIdConnectOptions.Authority 属性 的相对路径?尝试将其更改为绝对路径,看看是否可以解决问题。我认为可能是这种情况,因为您的请求 URL 不包含重定向 uri 中的 /id 路径:

http://localhost/id/account/login?**returnUrl=/connect/authorize/login**?respone_type

正确的路径当然应该是:

http://localhost/id/account/login?**returnUrl=/id/connect/authorize/login**?respone_type

希望对您有所帮助!请告诉我