使用OAuth2授权代码流的Javascript应用程序?

时间:2015-08-25 04:51:55

标签: oauth-2.0 openid-connect

您可以实施"授权代码流程"在这种情况下?

www.app.com

中的单页应用

www.backend.com

中的REST后端

可以通过javascript获得"授权码"然后将其传递给"后端"为此获取"访问令牌"?

1 个答案:

答案 0 :(得分:2)

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

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

  

如果客户端类型是机密或客户端是客户端      凭证(或指定的其他身份验证要求),      客户端必须按照描述使用授权服务器进行身份验证      在第3.2.1节中。

https://tools.ietf.org/html/rfc6749#section-4.1.3

  

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

http://openid.net/specs/openid-connect-core-1_0.html#TokenRequest

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

如果您的授权服务器支持这种情况,那么如果您使用response_mode=query(或更好:response_mode=fragment,如@Hans所建议的那样),则使用JS应用中的授权代码流应该很容易,因为您可以使用您的JS主页作为redirect_uri并使用一些JS从查询字符串或片段中提取授权代码。