如果在IIS中托管,IdentityServer API将未经授权。
如果在IIS中托管,IdentityServer API将未经授权。
我按照这里的说明,向Duende IdentityServer 6.2添加了额外的API。然后我尝试使用他们自己的库(称为AccessTokenManagement或Identity.Model)中的typed httpClient从示例应用程序访问它,基本上按照他们的简单示例进行操作。我使用了授权码流程,一切都很简单和默认。
当服务器和客户端都位于同一台开发机器的localhost上时,它运行良好。但是,一旦我将IdentityServer发布到IIS上,API就停止工作了,而其他部分仍然工作正常(我可以进行身份验证,并且在Fiddler中可以看到令牌交换正常工作)。
对API的调用包括两个步骤:
- 使用刷新令牌调用
/connect/token
。服务器返回访问令牌。 - 使用这个新的访问令牌调用我的端点。
该流程在步骤1上失败。对/connect/token
的调用已经是未经授权的,我无法理解为什么。"好"和"坏"的调用看起来是一样的,我看不到任何区别。之前在不久之前对/connect/userinfo
的调用也包括相同的两个步骤,它可以正常工作。服务器和客户端的日志都没有给出任何线索。
没有反向代理,只有简单的URI。自动密钥管理已启用,并且密钥存储在SQL表中,对于开发和已发布的服务器是共用的。启用了Asp.Net Core数据保护,并且密钥也是共用的。
下面是日志的相关部分。我注意到"未找到请求路径的端点条目"是特定于IdentityServer的,它实际上并不意味着找不到端点。它找到了,但没有处理。我还注意到在坏请求中的响应头和关于"已签入Cookie"的日志条目,但不确定它的含义和是否相关。
我已经没有更多的想法了。
在尝试获取新的访问令牌时,从IIS收到的错误响应:
在开发过程中收到的正确响应:
///////坏请求的相关日志部分 |Duende.AccessTokenManagement.OpenIdConnect.UserAccessAccessTokenManagementService|用户test@test.com的令牌需要刷新。 |Microsoft.AspNetCore.Authentication.Cookies.CookieAuthenticationHandler|身份验证方案:cookie已成功验证。 |Duende.AccessTokenManagement.OpenIdConnect.UserTokenEndpointService|刷新令牌请求至:https://auth.mysite.org/connect/token |Duende.AccessTokenManagement.OpenIdConnect.UserAccessAccessTokenManagementService|刷新访问令牌时出错。错误=未经授权 |System.Net.Http.HttpClient.IdsService.ClientHandler|发送HTTP请求POST https://auth.mysite.org/mycontroller/myaction |System.Net.Http.HttpClient.IdsService.ClientHandler|收到HTTP响应头,用时117.7278ms - 401 ///////相同部分的良好请求 |Duende.AccessTokenManagement.OpenIdConnect.UserAccessAccessTokenManagementService|用户test@test.com的令牌需要刷新。 |Microsoft.AspNetCore.Authentication.Cookies.CookieAuthenticationHandler|身份验证方案:Cookies已成功验证。 |Duende.AccessTokenManagement.OpenIdConnect.UserTokenEndpointService|刷新令牌请求至:https://localhost:5001/connect/token |Microsoft.AspNetCore.Authentication.Cookies.CookieAuthenticationHandler|身份验证方案:Cookies已签入。 |System.Net.Http.HttpClient.IdsService.ClientHandler|发送HTTP请求POST https://localhost:5001/mycontroller/myaction |System.Net.Http.HttpClient.IdsService.ClientHandler|收到HTTP响应头,用时1994.9611ms - 200 ///////BAD请求期间的服务器日志 Duende.IdentityServer.Hosting.EndpointRouter 未找到请求路径的端点条目:"/mycontroller/myaction" Duende.IdentityServer.Hosting.LocalApiAuthentication.LocalApiAuthenticationHandler 调用HandleAuthenticateAsync Duende.IdentityServer.Hosting.LocalApiAuthentication.LocalApiAuthenticationHandler 身份验证方案:"IdentityServerAccessToken"未经身份验证。 Duende.IdentityServer.Hosting.LocalApiAuthentication.LocalApiAuthenticationHandler 身份验证方案:"IdentityServerAccessToken"被挑战。