在客户端之间共享访问令牌
我有一个使用隐式流与身份服务器4进行身份验证的应用程序。该应用程序分为两个独立的.net核心应用程序。一个应用程序处理服务于前端的后端和其他手柄。在客户端之间共享访问令牌
后端和前端共享相同的作用域,API名称和权限设置。
我将与第三方进行整合。我们的后端应用程序将调用第三方应用程序。我们需要确保对第三方应用程序的呼叫进行身份验证。我想共享后端应用程序从前端接收到的访问令牌并将其发送给第三方应用程序。我不太确定这样做所需的设置。
我以为我可以添加一个新的客户端到身份服务器,并设置它只有第三方所需的所需范围。但在我的本地测试中,我一直无法得到这个工作。我得到一个错误IDX10804无法从... /。获取配置。well-known/openid-configuration - 发生安全错误。
我的配置是这样的:
new Client
{
ClientId = "thirdPartyClient",
ClientName = "thirdPartyClient",
AllowedGrantTypes = GrantTypes.HybridAndClientCredentials,
ClientSecrets =
{
new Secret("secret".Sha256())
},
AllowedScopes =
{
IdentityServerConstants.StandardScopes.OpenId,
IdentityServerConstants.StandardScopes.Profile,
IdentityServerConstants.StandardScopes.Email
},
AllowOfflineAccess = true,
AllowAccessTokensViaBrowser = true,
RequireConsent = false
},
new Client
{
ClientId = "myapplication",
ClientName = "myapplication",
AllowedGrantTypes = GrantTypes.Implicit,
ClientSecrets =
{
new Secret("secret".Sha256())
},
RedirectUris = { "https://.../callback.html" },
PostLogoutRedirectUris = { "https://.../index.html"
AllowedCorsOrigins = { "https://..." },
AllowedScopes =
{
IdentityServerConstants.StandardScopes.OpenId,
IdentityServerConstants.StandardScopes.Profile,
IdentityServerConstants.StandardScopes.Email,
IdentityServerConstants.StandardScopes.Address,
"myscope",
},
AllowOfflineAccess = true,
AllowAccessTokensViaBrowser = true,
RequireConsent = false
}
我要对这个正确的方式?
您还没有在客户端添加重定向uri thirdPartyClient
。没有重定向uri客户端将无效。
RedirectUris
指定允许的URI如果打开detailed logging与禁用只是我的代码令牌或授权码返回
。你可以看到错误日志找到真正的原因
我会尝试详细的日志记录。对于thirdPartyClient,呼叫流程是: 1.用户不会在浏览器中的一些动作 2.浏览器调用我们的C#的Web API 3.我们的C#的Web API调用thirdPartyClient 4. thirdPartyClient做一个动作,并返回HTTP响应 5. C#Web API接收响应并将结果返回给用户的浏览器 在此流程中,用户不会离开我们的用户界面。在这种情况下需要重定向URI吗? 但是,最终,我们需要添加一个用户点击链接的流程,并且链接执行SSO并将用户登录到第三方用户界面。 –
@RiazAhmad我的意思是'RedirectUris = {“https://.../callback.html”},''ClientId =“thirdPartyClient”缺少部分,'你有没有尝试添加它? – MJK
我修复了IDX10804错误。这是一个权威url的简单无效配置,在本地运行。 随着解决,我得到一个“观众是无效的”错误。所以它看起来像我不能重复使用相同的访问令牌,因为clientid是不同的。如果我使用ClientId =“myapplication”而不是ClientId =“thirdPartyClient”,则错误消失。这是因为令牌被签名而产生的。这应该如何在微服务架构中起作用?每项服务是否都需要使用相同的客户端ID?如果初始登录来自不同的客户端ID,我们如何执行SSO? –
这是什么状态? – MJK