我拥有一个Play Framework应用程序,充当后端服务器,提供一组REST API 在客户端,我拥有一个AngularJS应用程序,它通过AJAX从后端服务器调用API。
目前,我使用基于会话令牌机制的解决方案 这意味着每次用户成功登录时,都会在客户端检索包含身份验证令牌的cookie 然后,在每个请求中,在服务器上提取由客户机请求提供的cookie值(auth令牌),如果有效,则发出请求。
现在我想使用OAuth 2.0。原因是? :
关键是我不涉及第三方,因为所有受保护的资源都是我自己的 我遇到了这个问题article,解释了如何使用OAuth 2.0来保护内部REST API,而不是像往常一样实现两条腿而不是三条腿。
但是,在调用需要对用户进行身份验证的REST API时,我无法弄清楚客户端凭据流如何对特定用户进行身份验证。
事实上,客户端凭据流似乎基于全局client_id
,client_secret
密钥(应用程序的全局,因此在我的情况下是我的Javascript应用程序),因此对目标不够具体特定用户和控制器的特定权限。
任何帮助都会很棒。
答案 0 :(得分:3)
似乎您应该使用“资源所有者密码凭据授权”(http://tools.ietf.org/html/rfc6749#section-4.3)。它很简单 - 将客户端ID /机密放在Authorization标头中,并将用户名/密码放在查询变量中。以下是RFC的一个示例:
POST /token HTTP/1.1
Host: server.example.com
Authorization: Basic czZCaGRSa3F0MzpnWDFmQmF0M2JW
Content-Type: application/x-www-form-urlencoded
grant_type=password&username=johndoe&password=A3ddj3w
服务器端,您可以检查客户端(您的JavaScript应用程序)和用户的有效性。请记住,保护客户端凭据是不可能的,因为它将嵌入到您的(可下载的)JavaScript代码中。用户名/密码由最终用户直接输入。