鉴于以下代表场景,如下所述:https ://docs.microsoft.com/sv-se/windows-server/identity/ad-fs/development/ad-fs-on-behalf-of-authentication -在 Windows 服务器中
问题
是否可以将 ADFS 2016 中的中间层服务配置为机密客户端(代表中间层客户端)和从 swagger ui 中使用的公共/本机客户端?
了解示例
为了让中间层服务能够代表用户访问后端 webapi,我们需要在 ADFS 中注册一个机密客户端(clientid/secret),并将 ClientID 设置为 Audience,如文档中所述:“它ida:Audience 和 ida:ClientID 相互匹配非常重要”
这意味着应用程序组现在包含一个机密客户端,其中中间层服务 URL(受众)设置为 clientId,而不是您通常在此处期望的 guid ,为了这个示例,假设为https://localhost:5005 。
这很好,该示例现在可以工作,请参阅:https ://github.com/ajtowf/WebApp-OpenIDConnect-DotNet以获取工作示例。
问题
假设我现在想将带有 swagger-ui 的 swagger 添加到中间层服务。恕我直言,这将在 ADFS 中配置为本机客户端,因为我们要使用隐式流。(ADFS 2016 不支持使用 PKCE 的授权代码流)
但
如果我们使用 swagger 的 guid 配置本机客户端,则颁发令牌的受众群体无法用于访问中间层服务本身。(从外观上看,它可以用来访问用户信息端点:urn:microsoft:userinfo)
要为中间层服务获取有效的 access_token,需要将 clientid 设置为受众,就像在机密客户端案例中一样。
但
ClientID 需要在应用程序组中是唯一的,因此只能有一个将 clientid 设置为受众的注册。
甚至可以配置两个单独的流/客户端吗?我错过了什么吗?
这似乎是一个超级基本的场景,可以使用 IdentityServer 轻松配置,但在这种情况下我坚持使用 ADFS。
ADFS 配置
ClientID 为中间层服务客户端设置为受众,以便能够代表用户访问后端 WebAPI。