您可以实施"授权代码流程"在这种情况下?
www.app.com
中的单页应用www.backend.com
中的REST后端可以通过javascript获得"授权码"然后将其传递给"后端"为此获取"访问令牌"?
答案 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从查询字符串或片段中提取授权代码。