【问题标题】:Azure AD Access Token - Authorization Code is malformed or invalidAzure AD 访问令牌 - 授权代码格式错误或无效
【发布时间】:2018-10-11 07:11:34
【问题描述】:

我有一个带有 C# 后端的 Web 应用程序试图从 Azure AD 获取访问令牌。使用https://login.microsoftonline.com/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/oauth2/token。我得到了授权码,但是在请求访问令牌时我得到了这个响应:

error: invalid_grant

error_description: AADSTS70000: Transmission data parser failure: Authorization Code is malformed or invalid.

我已检查重定向 url 与我在请求授权码时使用的完全相同。并且 redirect_uri、app_id_uri 和客户端密码都是 url 编码的。

        HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri);
        request.Method = "POST";

        string parameter = "code=" + code;
        parameter += "&client_id=" + client_id;
        parameter += "&client_secret=" + client_secret;
        parameter += "&redirect_uri=" + redirect_uri;
        parameter += "&grant_type=authorization_code";
        parameter += "&resource=" + app_id_uri;

        ASCIIEncoding encoding = new ASCIIEncoding();
        byte[] byteArray = encoding.GetBytes(parameter);
        request.ContentLength = byteArray.Length;

        request.ContentType = "application/x-www-form-urlencoded";
        Stream datastream = request.GetRequestStream();
        datastream.Write(byteArray, 0, byteArray.Length);
        datastream.Close();

        WebResponse response = request.GetResponse();
        using (StreamReader sr = new StreamReader(response.GetResponseStream()))
        {
            while (!sr.EndOfStream)
            {
                string line = sr.ReadLine();
                return line;
            }
        }

更新:

这是获取授权码的请求:

https://login.microsoftonline.com/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/oauth2/authorize?client_id={CLIENT_ID}&response_type=id_token&redirect_uri={REDIRECT_URI}&response_mode=fragment&scope=openid&state=microsoftoauth&nonce=7362CAEA-9CA5-4B43-9BA3-34D7C303EBA7

【问题讨论】:

  • 尝试对/authorize 端点的新请求。
  • @SunnySun-MSFT 我为每个请求做一个新的,而不是重复使用代码。
  • 请求新的授权码,使用新的授权码请求token后,还是提示同样的错误?
  • @SunnySun-MSFT 是的,同样的事情。
  • 您能在这里分享您对授权码的请求吗?

标签: c# azure-active-directory


【解决方案1】:

https://login.microsoftonline.com/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/oauth2/authorize?client_id={CLIENT_ID}&response_type=id_token&redirect_uri={REDIRECT_URI}&response_mode=fragment&scope=openid&state=microsoftoauth&nonce=7362CAEA-9CA5-4B43-9BA3-34D7C303EBA7

根据你的请求,我发现你的请求只是id_token,没有包含授权码,所以提示code invalid,所以你需要在code request中添加coderesponse_type=id_token+code

【讨论】:

  • 如果有什么要更新的,请告诉我,谢谢!
  • 如果回答对你有用,请帮忙标记,谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-10
  • 2020-07-19
  • 2021-12-26
  • 1970-01-01
  • 2021-06-20
  • 1970-01-01
相关资源
最近更新 更多