我在Azure上使用https网址运行IdentityServer4,并且我使用带有the angular-oauth2-oidc library的Angular CLI项目来处理Implicit Flow。我试图设置单点注销,但它无法正常工作。
我正在调用logOut
on the OAuthService
自动配置(通过发现文档)在auth服务器上使用注销网址,即https://my-id4-server.example.com/connect/endsession
,查询字符串参数包含{{1和token_hint
。
出于某种原因,实际行为是IdentityServer4将浏览器重定向( 302 )到网址postLogoutUri
,浏览器获取 404 即可。此外,如果我在单独的选项卡中打开IdentityServer页面,我可以看到我的会话仍然存在。
预期行为是我的会话结束,我被重定向回我的SPA。
在我配置的ID4Server端:
https://my-id4-server.example.com/account/logout?logoutid=...
和RedirectUris
与PostLogoutRedirectUris
(我的SPA目前在哪里运行)等等; http://localhost:4200
设置为AllowedGrantTypes
Implicit
也允许我的localhost SPA 此外,我可以在AllowedCorsOrigins
配置端点中看到endsession
端点已正确配置。
在SPA方面,我已配置.well-known
,issuer
,redirectUri
和clientId
。使用重定向登录可以正常工作。
结论:如果scope
端点重定向到endsession
而后者又提供了404,会出现什么问题?
答案 0 :(得分:0)
我猜测account/logout
是此流的默认重定向,您需要将其更改为IDS4设置中的实际注销网址,或者只是实现该端点。
根据设计,在终结点终结后,IDS4会控制你。您将获得一个logoutid
参数,然后您可以将其与IIdentityServerInteractionService结合使用,以获取有关结束请求的信息并采取必要的操作 - 例如提示确认,加载前台通道注销iframe,处理退出外部IDP等。
答案 1 :(得分:0)
问题是IdentityServer方面缺少Logout(...)
的Controller操作。如果你没有那些 那些,那么你会得到所说的行为。