将经过身份验证的用户转移到 SPA,而无需强制他们重新输入其凭据
Transfer the authenticated user to a SPA without forcing them to re-enter their credentials
这是我当前的设置:
- IdentityServer4
- API(承载认证)
- SPA 页面(oidc 客户端隐式流重定向到 IdentityServer4 快速入门 UI)
- 本机应用程序(用 C# 编写)
本机应用程序已具有用户凭据。我想从本机应用程序向 SPA 页面提供网络 link,但我不想强制用户在导航到网络时再次登录。相反,我想将他们当前的会话移动到网页上。
是否可以 "inject" 访问令牌进入 oidc 客户端? (使用 url 片段)。或者是否有任何其他流程或方式来完成这项工作?
一般来说,答案应该是:你走错了路。
你看:你在你的原生应用程序中使用了资源所有者密码流,这是错误的。它不是交互式的,这意味着不仅 IdP 可以访问凭据。通常,建议将此类流程用于测试目的等,而不是一般用途。非交互式流程的一个巨大限制是它不会创建用户会话。 If you switch your native app to an interactive flow such as Code flow with PKCE extension,它将创建会话。之后,只要身份服务器的会话 cookie 处于活动状态,您的其他应用程序就会自动进行身份验证。
注意:如果您不想改进您的架构,您可以自由地做任何您喜欢的事情,包括提供令牌在 link。该令牌对于调用 API 仍然有效。但这不是隐式流程,您不会有会话,也无法使用静默刷新功能。
这是我当前的设置:
- IdentityServer4
- API(承载认证)
- SPA 页面(oidc 客户端隐式流重定向到 IdentityServer4 快速入门 UI)
- 本机应用程序(用 C# 编写)
本机应用程序已具有用户凭据。我想从本机应用程序向 SPA 页面提供网络 link,但我不想强制用户在导航到网络时再次登录。相反,我想将他们当前的会话移动到网页上。
是否可以 "inject" 访问令牌进入 oidc 客户端? (使用 url 片段)。或者是否有任何其他流程或方式来完成这项工作?
一般来说,答案应该是:你走错了路。
你看:你在你的原生应用程序中使用了资源所有者密码流,这是错误的。它不是交互式的,这意味着不仅 IdP 可以访问凭据。通常,建议将此类流程用于测试目的等,而不是一般用途。非交互式流程的一个巨大限制是它不会创建用户会话。 If you switch your native app to an interactive flow such as Code flow with PKCE extension,它将创建会话。之后,只要身份服务器的会话 cookie 处于活动状态,您的其他应用程序就会自动进行身份验证。
注意:如果您不想改进您的架构,您可以自由地做任何您喜欢的事情,包括提供令牌在 link。该令牌对于调用 API 仍然有效。但这不是隐式流程,您不会有会话,也无法使用静默刷新功能。