我正在使用api rest进行身份验证。 我使用HttpClientModule
let url = "https://bms.kaseya.com/api/token"
let headers = new HttpHeaders()
.set('Accept','application/json')
.set('Content-Type', 'application/x-www-form-urlencoded');
let params = new HttpParams()
.set('grant_type','#')
.set('username','#')
.set('password','#')
.set('tenant','#');
return this._httpClient.post(url,{params, headers})
当我发送它时,它会回复{error:“unsupported_grant_type”}
任何人都可以帮助我?
答案 0 :(得分:3)
过去几天我也收到了这个错误。尽管今天已经解决了。 这是整个方法:
regenerateToken() {
var headers = new HttpHeaders();
headers.append('Content-Type', 'application/x-www-form-urlencoded');
let urlSearchParams = new URLSearchParams();
urlSearchParams.set('grant_type', 'password');
urlSearchParams.set('username', 'mD6sfrFntnE5DqQCjeCpyAh8NrxqZqYCpFTCmLcJEuGin-27X6DlzMqLxMw_x8kI7UnCYYLAy1gaGQT7RR_NFMNCfCa2jPDadLJXpf7Rsmc=');
let body = urlSearchParams.toString();
return this.http.post('https://bms.kaseya.com/api/token', body, {
headers: headers
})
.map((data: any) => data.access_token)
.catch(err => {
debugger;
return Observable.throw(err.statusText);
})
}
希望这有帮助。
答案 1 :(得分:0)
首先你肯定有一个CORS问题,但你没有发布足够的信息,但我会尽我所能。
事实证明我也遇到了和你一样的问题,但经过一番挖掘后,我发现这个堆栈溢出网站应该可以帮助你入门。
Bad Request (400) when using Web API Token Authenticaion from Angualr JS
其次在调试响应并查看我发送给api的内容之后。我在默认情况下看到它发送了
标题('Accept', 'application/json')
和
('Content-Type', 'application/x-www-form-urlencoded');
这可能是角度5的属性,将其设置为默认值。
所以我只是删除了标题,只传递你的参数。
return this.http.post('url', params);
事实证明,如果您有重复的标题,它将返回不受支持的授权类型。所以只发一个。
(PS)请务必仔细检查您是否收到了预检请求的200状态,并且您在帖子上收到错误消息(不支持的授权类型)。 否则,解决方案将涉及不同的步骤。为此,您可以尝试下面的地方。
CORS enabled but response for preflight has invalid HTTP status code 404 when POSTing JSON
和
Angular 2: how to deal with Response for preflight has invalid HTTP status code 400. Bad request
希望这有帮助。
答案 2 :(得分:-1)
//setting URL paramters
let urlParams = new URLSearchParams();
urlParams.append('username',login.usrNm);
urlParams.append('password',login.pswd);
urlParams.append('grant_type','password');
urlParams.append('client_id','fooClientIdPassword');
//setting headers for basic authenication
let headerObj = new HttpHeaders();
headerObj.append('Content-Type','application/x-www-form-urlencoded')
headerObj.append('Authorization','Basic '+btoa(login.usrNm+':'+login.pswd));
//posting the request with url paramaters and header
this._http.post('http://localhost:8002/oauth/token',
urlParams .toString(), {headers:headerObj})
.subscribe(
data => this.saveToken(data),err => alert('Invalid UserName and Password'));