身份服务器端点 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 正文