Oauth 将经过身份验证的用户转移到SPA,而不强制他们重新输入凭据

Oauth 将经过身份验证的用户转移到SPA,而不强制他们重新输入凭据,oauth,identityserver4,openid-connect,oidc-client-js,Oauth,Identityserver4,Openid Connect,Oidc Client Js,这是我当前的设置: 标识服务器4 API(承载认证) SPA页面(oidc客户端隐式流重定向到IdentityServer4快速启动UI) 本机应用程序(编写的i/C) 本机应用程序已具有用户凭据。我想从本机应用程序提供指向SPA页面的web链接,但我不想强迫用户在导航到web时再次登录。相反,我想将他们当前的会话移动到web页面 是否可以将访问令牌“注入”到oidc客户端?(使用url片段)。或者是否有其他流程或方法可以实现这一点?一般来说,答案应该是:您走错了路。看:您在本机应用程序中使

这是我当前的设置:

  • 标识服务器4
  • API(承载认证)
  • SPA页面(oidc客户端隐式流重定向到IdentityServer4快速启动UI)
  • 本机应用程序(编写的i/C)
本机应用程序已具有用户凭据。我想从本机应用程序提供指向SPA页面的web链接,但我不想强迫用户在导航到web时再次登录。相反,我想将他们当前的会话移动到web页面


是否可以将访问令牌“注入”到oidc客户端?(使用url片段)。或者是否有其他流程或方法可以实现这一点?

一般来说,答案应该是:您走错了路。
看:您在本机应用程序中使用了资源所有者密码流,这是错误的。它不是交互式的,这意味着不仅IdP可以访问凭据。一般情况下,此类流量建议用于测试目的等,而不是一般用途。非交互式流的一个巨大限制是它不会创建用户会话,它将创建会话。此后,只要Identity server的会话cookie处于活动状态,您的其他应用程序将自动获得身份验证。
NB:如果您不想改进您的体系结构,您可以自由执行任何您喜欢的操作,包括在链接中提供令牌。该令牌对于调用API仍然有效。但这不是隐式流程,您将没有会话,也不可能使用静默刷新功能。

同意。如果您希望在这两个客户端应用程序之间进行SSO,这是正确的方法。感谢您的输入!如果系统中的所有用户(针对此特定服务)只有一个“用户帐户”,客户端凭据是否可以与本机应用程序(与idsrv共享机密)一起流动,并将访问令牌发送到SPA工作,而不破坏任何最佳做法?嗯。。。听起来很奇怪。当两个人知道一个秘密时,它就不再是秘密了,那么为什么在这种情况下你需要任何真正的安全系统呢?。。如果看不到整个场景,就很难理解你真正需要什么。但是,是的,您可以使用客户端凭据来授权您的应用,并完全跳过用户身份验证。使用客户端凭据进行了一些测试,但由于您无法在访问令牌中设置主题,因此无法正常工作。我们已经有了API、Idsrv(通过我们自己的内部用户帐户进行身份验证)和SPA。“本机应用程序”是另一个部门的遗留应用程序,它将为其所有用户使用我们自己的一个用户帐户。他们必须从这个应用程序访问我们的SPA。旧版应用程序将始终具有此帐户的凭据。那么,您需要将子声明传递给您的SPA吗?您可以使用idsrv文档中描述的委派模式来实现这一点。但是看看你奇怪的配置,我认为你真的不需要它。您可以继续使用“资源所有者密码”,并将令牌传递给您的SPA,就像您从一开始就想要的那样。请记住,除非IdP为您提供,否则您的应用程序中永远不会有真正的用户会话。