当 Oauth 提供者用于委托身份验证时,应用程序服务器 return 是否向调用者提供任何令牌?
When an Oauth provider is used to delegate authentication, then does the appserver return any token to the caller?
在 Oauth 和 Openidconnect 中,appserver 端点调用启动 Oauth 流程,app 服务器从 auth 服务器获取令牌,并能够将令牌传递给资源服务器以代表资源访问资源(委托)所有者。
令牌交换发生在应用服务器和资源服务器之间,令牌永远不会到达最终用户的浏览器。
我正在开发将由移动应用程序使用的网络 api(也称为应用程序服务器)。不涉及其他服务器。目前,如果提供了正确的凭据(针对数据库进行验证),登录端点 returns 会向用户发送一个签名的 JWT 令牌。用户将此令牌放在后续请求的 header 中。
假设我不想拥有用户数据库和验证登录,而是将授权检查委托给另一个服务,如 azure b2c 或 firebase(使用 Oauth),那么我假设流程如下所示:
- Api 注册了 firebase/azure b2c(我们称其为提供者)clientid,secret。
- 用户调用我的 api
的登录端点
- api 调用提供商的 Oauth 流程。
- 用户收到弹出窗口以向提供商进行身份验证。
- 最终,提供商会将令牌(包含用户名等声明)发送到 api(又名应用程序服务器)
用户是否取回任何令牌?否则,当用户进行后续端点调用时,端点如何识别此用户是谁以及他是否已通过身份验证?
虽然可以将访问令牌发回给用户,但从安全最佳实践的角度来看,最好不要这样做,我引用的原因如下 this:
Because of the issues outlined above, the best security recommendation
for an SPA is to avoid keeping tokens in the browser at all. This can
be achieved with the help of a lightweight back-end component, often
described as a Backend-For-Frontend.
The backend component can then be configured as a confidential OAuth
client and used to keep tokens away from the browser. It can either be
stateful and keep tokens in custom storage, or stateless and store the
tokens in encrypted HTTP-only, same-site cookies. Whichever variant is
chosen, the backend component creates a session for the SPA, using
HTTP-only, secure, same-site cookies, thus enabling a high level of
security. Such cookies cannot be read by scripts and are limited to
the domain of the SPA. When combined with strict Content Security
Policy headers, such architecture can provide a robust protection
against stealing tokens
同样来自 here,他们建议移动应用程序的 OAuth2 最佳实践,它应该在系统浏览器组件内执行 OAuth 流程。
在 Oauth 和 Openidconnect 中,appserver 端点调用启动 Oauth 流程,app 服务器从 auth 服务器获取令牌,并能够将令牌传递给资源服务器以代表资源访问资源(委托)所有者。
令牌交换发生在应用服务器和资源服务器之间,令牌永远不会到达最终用户的浏览器。
我正在开发将由移动应用程序使用的网络 api(也称为应用程序服务器)。不涉及其他服务器。目前,如果提供了正确的凭据(针对数据库进行验证),登录端点 returns 会向用户发送一个签名的 JWT 令牌。用户将此令牌放在后续请求的 header 中。
假设我不想拥有用户数据库和验证登录,而是将授权检查委托给另一个服务,如 azure b2c 或 firebase(使用 Oauth),那么我假设流程如下所示:
- Api 注册了 firebase/azure b2c(我们称其为提供者)clientid,secret。
- 用户调用我的 api 的登录端点
- api 调用提供商的 Oauth 流程。
- 用户收到弹出窗口以向提供商进行身份验证。
- 最终,提供商会将令牌(包含用户名等声明)发送到 api(又名应用程序服务器)
用户是否取回任何令牌?否则,当用户进行后续端点调用时,端点如何识别此用户是谁以及他是否已通过身份验证?
虽然可以将访问令牌发回给用户,但从安全最佳实践的角度来看,最好不要这样做,我引用的原因如下 this:
Because of the issues outlined above, the best security recommendation for an SPA is to avoid keeping tokens in the browser at all. This can be achieved with the help of a lightweight back-end component, often described as a Backend-For-Frontend.
The backend component can then be configured as a confidential OAuth client and used to keep tokens away from the browser. It can either be stateful and keep tokens in custom storage, or stateless and store the tokens in encrypted HTTP-only, same-site cookies. Whichever variant is chosen, the backend component creates a session for the SPA, using HTTP-only, secure, same-site cookies, thus enabling a high level of security. Such cookies cannot be read by scripts and are limited to the domain of the SPA. When combined with strict Content Security Policy headers, such architecture can provide a robust protection against stealing tokens
同样来自 here,他们建议移动应用程序的 OAuth2 最佳实践,它应该在系统浏览器组件内执行 OAuth 流程。