{error:“unsupported_grant_type”}有角5

时间:2018-02-15 19:54:19

标签: request httpclient angular5

我正在使用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”}

任何人都可以帮助我?

3 个答案:

答案 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'));