Oauth 2.0 具有OAuth2授权代码流的Javascript应用程序?

Oauth 2.0 具有OAuth2授权代码流的Javascript应用程序?,oauth-2.0,openid-connect,Oauth 2.0,Openid Connect,在这种情况下,您可以实现“授权代码流”吗 www.app.com www.backend.com 是否可以通过javascript获取“授权码”,然后将其传递到“后端”以获取“访问令牌”?这可以通过将重定向\u uri设置到SPA中的某个位置,从授权响应中提取代码(使用中描述的任何方法)并以特定于应用程序的方式将其传递到后端。当使用OpenID Connect时,可以选择在重定向uri的片段中交付代码,这与将其作为查询参数交付相比具有一些安全优势。理论上,将授权代码流(或混合流)与JS/移动/桌

在这种情况下,您可以实现“授权代码流”吗

www.app.com

www.backend.com


是否可以通过javascript获取“授权码”,然后将其传递到“后端”以获取“访问令牌”?

这可以通过将
重定向\u uri
设置到SPA中的某个位置,从授权响应中提取
代码(使用中描述的任何方法)并以特定于应用程序的方式将其传递到后端。当使用OpenID Connect时,可以选择在
重定向uri
的片段中交付
代码,这与将其作为查询参数交付相比具有一些安全优势。

理论上,将授权代码流(或混合流)与JS/移动/桌面应用程序一起使用绝对是可能的,您甚至不需要为此存储客户端凭据(当然可以,但提取它们非常简单,毫无意义)

与普遍的看法相反,“公共”应用程序(即无法安全存储其凭据的应用程序,包括JS应用程序)在使用授权代码流时不需要客户端身份验证:

如果客户类型是机密的,或者客户是已发布的客户 凭据(或指定的其他身份验证要求),以及 客户端必须按照所述向授权服务器进行身份验证 在第3.2.1节中

如果客户端是机密客户端,则必须使用为其客户端id注册的身份验证方法对令牌端点进行身份验证,如第9节所述

在实践中,我很确定大多数授权/身份验证服务器在使用授权代码流时都会强制执行客户端身份验证,并建议对公共应用程序使用隐式流


如果您的授权服务器支持此方案,那么如果您使用
response\u mode=query
(或者更好:
response\u mode=fragment
,那么在JS应用程序中使用授权代码流应该很容易,由于您可以使用JS主页作为
重定向uri
,并使用一些JS从查询字符串或片段中提取授权代码。

Hans,该解决方案不安全吗?为什么每个人提到的唯一方式是“隐式流”?谢谢:)你知道有一个博客解释了如何使用SPA的“服务器流”吗?将令牌发送到Javascript SPA本质上比发送到后端更不安全,因为不涉及客户端机密;如果您有可以使用的服务器代码(这使您的SPA不再是SPA),请应用常规授权代码授权