身份服务器端点 OIDC

Posted

技术标签:

【中文标题】身份服务器端点 OIDC【英文标题】:Identity Server Endpoints OIDC 【发布时间】:2017-10-11 01:48:54 【问题描述】:

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

第 1 步: 致电http://localhost:44431/account/login?returnUrl=/connect/authorize/login?respone_type.... 第 2 步:然后它转到 Authorize Endpoint 并返回一个令牌

localhost\id 下的问题托管:

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

第一步:拨打http://localhost/id/account/login?returnUrl=/connect/authorize/login?respone_type....

>> 检查请求标头:

>> 响应头:

>> 在http://localhost/id/.well-known/openid-configuration打开 ID 配置

  "authorization_endpoint":"http://localhost/id/connect/authorize",

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

>> 检查标题:

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

【问题讨论】:

【参考方案1】:

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

    克隆的 IdentityServer4.Samples。启动 Quickstarts/3_ImplicitFlowAuthentication 解决方案: https://github.com/IdentityServer/IdentityServer4.Samples/tree/release/Quickstarts/3_ImplicitFlowAuthentication 在 IIS 中创建了一个应用程序,路径为“/id”,AppPool 设置为“无托管代码” 在 IdentityServer4 项目上运行“dotnet publish”并将输出移动到 IIS 应用根文件夹

    将 MvcClient 项目中的授权 URL 更改为指向 localhost/id

    app.UseOpenIdConnectAuthentication(new OpenIdConnectOptions
    
        AuthenticationScheme = "oidc",
        SignInScheme = "Cookies",
        Authority = "http://localhost/id",
        RequireHttpsMetadata = false,
        ClientId = "mvc",
        SaveTokens = true
    );
    

    加载 MvcClient 应用程序并导航到带有“授权”过滤器的路由。使用适当的虚拟目录正确进行重定向

通过转到 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

希望这会有所帮助!请告诉我

【讨论】:

Open ID 配置很好。我没有在同一个项目中使用 MVC 应用程序,它是不同应用程序中的 angular2 项目。但是无论其他应用程序如何,我都在从 URL 进行测试,只需将其放在 url 中即可。我将尝试通过安装新副本再次复制它。 所以你是手工制作那个网址?如果是这样,那么我在底部的建议应该可以解决它 - 如果您留在同一个域中,您仍然需要 /Id 在前面。如果跨域,它需要是一个绝对路径,包括 /id

以上是关于身份服务器端点 OIDC的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 OIDC (vuejs + nodejs) 对前端和后端进行身份验证?

如何使用 openid connect OIDC 加密 REST 正文

OpenID Connect 轻量级库

使用带有身份服务器 4 的 oidc 客户端进行静默登录

oidc-client-js 针对 Auth0 的 signoutRedirect 不返回结束会话端点

没有用户使用身份服务器和javascript的oidc客户端登录SilentCallback