我有一个单页应用程序,它当前打开了一个指向OAuth2身份验证提供程序的选项卡。用户输入凭据后,服务器将发送响应,该响应将关闭选项卡。服务器"知道"客户端现在已通过在其上设置会话进行身份验证。
但是,我实际上不想使用会话。我想使应用程序保持无状态。我读到这应该是通过使用服务器可以验证的 oauth2 持有者令牌来实现的。
客户端如何获得这样的持有者令牌?当我使用 iframe 或选项卡以便用户可以在服务提供商的登录页面上输入他们的凭据时,我的 javascript 永远无法获取响应。
使用外部提供程序(没有会话)的OAuth2是否真的不可能在Web中的当前客户端-服务器体系结构中实现?
您可能正在考虑使用"Json Web 令牌"而不是常规的"访问令牌"。JWT 是经过数字签名的项目,因此服务器(您的 API)可以验证它们(及其内容)。
单页应用通常使用 OAuth2"隐式"流。令牌 (JWT) 直接从授权服务器接收,可用于通过 API 进行身份验证。客户端库将从最终响应中提取 JWT(通常采用以下格式的 URL:http://callback/#id_token={the base64 encoded token}
检查您使用的 AuthZ 服务器是否真的可以返回 JWT,并且您需要在托管 API 的服务器中包含可以验证它们的令牌处理程序。
注意:如果网页和 API 位于不同的域中,则还需要配置 CORS。
看看这个例子,使用 .NET WebApi 和一个返回 JWT 的授权服务器(在我们的示例中是我们的,但可以与任何人一起使用)。