我正在尝试发送帖子请求以从https://login.microsoftonline.com/common/oauth2/v2.0/token
接收我的访问令牌。当我在我的REST客户端中尝试此操作时,它可以正常工作,但当我尝试将其集成到我的应用程序时,它会向我发送错误400 Bad Gateway
,并显示消息AADSTS90014: The request body must contain the following parameter: 'grant_type'
。我试着寻找答案,并发现我需要在我的帖子请求中实现标题,所以我这样做了,但它仍然无法工作。有什么想法吗?
Http进口:
import { HttpClient, HttpHeaders, HttpRequest } from '@angular/common/http';
致电发布请求:
var url=this.outlook_authentification_endpoint+"token";
var query_parameters=JSON.stringify({grant_type:"authorization_code", client_id:this.outlook_client_id, code: this.outlook_user_code, client_secret: this.outlook_secret_key, redirect_uri: this.outlook_redirect_uri});
const httpOptions = {
headers: new HttpHeaders({
'Content-Type': 'application/x-www-form-urlencoded'
})
};
this.query_service.postOutlook(url, query_parameters, httpOptions, (data)=>
{
console.log(data);
});
调用帖子功能:
public postOutlook(url, query, headers, callback)
{
this.operation_pending=true;
this.http_client.post(url,query, headers).subscribe((data)=>
{
this.operation_pending=false;
callback(data);
});
}
任何人都可以看到我的错误在哪里吗?
答案 0 :(得分:0)
您正在使用错误的OAuth2流程(获取令牌的方式)。您使用的Auth code grant无法在浏览器应用程序中使用,因为您必须在JavaScript中保密您的客户端,这意味着将其公开。因此,您无法访问/token
端点。
您应该使用专为浏览器应用程序设计的Implicit grant。然后,您可以将令牌直接放入Angular应用程序中,而无需转到/token
端点。