【发布时间】:2015-10-30 10:06:48
【问题描述】:
经过相当广泛的研究,我缩小了我的问题范围。我有一个 curl 请求
curl -X POST -vu sampleapp:samplekey http://sampleurl:8090/oauth/token -H "Accept: application/json" -d "password=pass&username=username&grant_type=password&scope=read%20write&client_secret=samplekey&client_id=sampleapp"
它向我发送了类似
的响应 {
"access_token":"blah",
"token_type":"bearer",
"refresh_token":"blah",
"expires_in":43199,
"scope":"read write"
}
我有一个客户端应用程序 (AngularJS) 正在尝试与后端通信。它具有在服务器端实现的所有 CORS 标头和方法。
我从客户端获取登录信息并将其发布到 api 以尝试获取访问令牌。
现在,当我写作时(在 Issac 下面的第一个答案后更新)我的登录功能如下。有人告诉我我需要 3 个标头值:Authorization、Accept 和 Content-type
var _login = function (loginData) {
var theauthdata = Base64.encode('sampleapp:samplekey');
var deferred = $q.defer();
var headers2 = {
'Accept' : 'application/json',
'Authorization': 'Basic' + theauthdata,
'Content-Type': 'application/x-www-form-urlencoded'
};
// For JSON authorization
var data = {
'grant_type': 'password',
'scope' : 'read write',
'username' : loginData.username,
'password' : loginData.password,
// withCredentials : true,
'client_id' : 'sampleapp',
'client_secret' : 'samplekey'
}
$http.post(serviceBase + 'token', data, { headers: headers2},{withCredentials:true})
.success(function (response)
{
localStorageService.set('authorizationData', { token: response.access_token, userName: loginData.userName });
_authentication.isAuth = true;
_authentication.userName = loginData.userName;
deferred.resolve(response);
}).error(function (err, status) {
_logOut();
deferred.reject(err);
});
return deferred.promise;
};
即使在添加了所需的标头之后,在此过程中我还是从 api 服务器获得了一个 401 error。
在 curl 请求中 -u 部分表示 url unname/pwd,我想确保我以正确的方式编写调用。任何帮助将不胜感激。
编辑/更新:正如问题的第一条评论所说,是的,我应该发送 URL 的用户名/密码组合,而不是用户数据。
这就是我猜测的 curl 请求的 -u 部分的含义。
我在第一个答案后做了一些研究,显然我正在尝试 Basic HTTP authentication ?但我想澄清一下,我仍在将 clientUserData(登录信息)作为有效负载发送。那我做对了吗?我的印象是我在做resource-owner-grant-credentials,但这是基本的http auth,正如我被告知的那样?显然,我是 OAuth 的新手并且很困惑。有人可以根据上面的 curl 调用详细说明我正在实施的方法吗?基本上,我试图模仿上面给出的 curl 调用。
更新:我已经更新了登录代码。我有一个工厂设置来处理这些功能,我还建立了一个 Base64 工厂来对数据进行编码。我忍不住想我还是做错了什么或打电话错了?
【问题讨论】:
-
您的意思是除了用于登录的用户名/密码之外,还有一个用户名/密码可以POST到URL?
-
“网址的用户名和密码”是什么意思?为什么你有 2 个单独的用户凭据?
标签: angularjs curl http-headers xmlhttprequest basic-authentication