AADSTS90014:请求正文必须包含以下参数:'grant_type'

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了AADSTS90014:请求正文必须包含以下参数:'grant_type'相关的知识,希望对你有一定的参考价值。

我正在尝试发送一个帖子请求,以便从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);
    });
  }

任何人都可以看到我的错误在哪里?

答案

您正在使用错误的OAuth2流程(获取令牌的方式)。您正在使用Auth code grant,它不能在浏览器应用程序中使用,因为您必须在javascript中保密您的客户端,这意味着将其公开。所以你也无法访问/token端点。

您应该使用专为浏览器应用程序设计的Implicit grant。然后,您可以将令牌直接放入Angular应用程序中,而无需转到/token端点。

以上是关于AADSTS90014:请求正文必须包含以下参数:'grant_type'的主要内容,如果未能解决你的问题,请参考以下文章

oauth2错误AADSTS90014:请求正文必须包含以下参数:'grant_type'

AADSTS750054:SAMLRequest 或 SAMLResponse 必须作为查询字符串参数出现在 SAML 重定向绑定的 HTTP 请求中

如何修复“AADSTS90102:‘redirect_uri’值必须是有效的绝对 Uri。” Microsoft Graph 中的错误

AADSTS50011:请求中指定的回复 URL 与为应用程序配置的回复 URL 不匹配我很反感

AWS Lambda 错误:当 url 参数包含 JSON 数组时,“无法将请求正文解析为 json”

AADSTS50011:请求中指定的回复 URL 与为应用程序配置的回复 URL 不匹配:'**********-*****-*****-**** *****'