【问题标题】:How do I exchange an authorization code for an access_token for Azure AD Multi-Tenant application?如何为 Azure AD 多租户应用程序的 access_token 交换授权代码?
【发布时间】:2014-11-06 12:51:22
【问题描述】:

我正在编写一个 Web 应用程序,它将访问存储在 Microsoft Dynamics CRM Online 中的客户端数据。我想允许我的用户使用 OAuth 授予对其 Dynamics 帐户的访问权限。

  1. 我在 Azure AD 中创建了一个多租户应用程序,提供 redirect_uris,生成客户端 ID 和密码。多租户设置为开启。
  2. 我创建了一个演示 Microsoft Dynamics CRM 帐户。 “examplecrmaccount.crm4.dynamics.com”。
  3. 我已成功生成授权 url,将用户发送到授权屏幕,并收到应该交换“访问令牌”的“代码”。

我无法将此“代码”换成“access_token”。

$data = array(
    "grant_type" => "authorization_code", 
    "client_id" => urlencode("my_app_azure_ad_client_id"),
    "redirect_uri" => urlencode("https://myapp.com/callback"),
    "client_secret" => urlencode("my_app_azure_ad_client_secret"), 
    "code" => urlencode("code_returned_from_previous_request"),
    "resource" => urlencode("https://examplecrmaccount4.crm4.dynamics.com")
);

$endpoint = "https://login.windows.net/common/oauth2/token?api-version=1.0";

$response = helpers\Curl::doPOST(
    $endpoint,
    null,    
    array("Content-type: application/x-www-form-urlencoded"),
    $data
);

服务器响应:

Status 404
StatusName Not Found
{"error":"invalid_request","error_description":"ACS90002: No service namespace named \u0027common\u0027 was found in the data store.\r\nTrace ID: b1025082-3e9b-49d8-bf91-7d998f694162\r\nCorrelation ID: 49d9d1e5-6958-4ffc-91ff-464f078a00f5\r\nTimestamp: 2014-09-12 08:35:59Z","error_codes":[90002],"timestamp":"2014-09-12 08:35:59Z","trace_id":"b1025082-3e9b-49d8-bf91-7d998f694162","correlation_id":"49d9d1e5-6958-4ffc-91ff-464f078a00f5"}

【问题讨论】:

    标签: azure oauth oauth-2.0 microsoft-dynamics


    【解决方案1】:

    删除“api-version=1.0”查询参数,它应该可以工作。这是我们的文档和 Azure 门户中的一个错误,告诉您在使用授权代码流时添加它。

    【讨论】:

    • 从中删除“api-version=1.0”(以及授权 url 请求“/common/oauth2/authorize”)起到了作用。我现在收到:{"error":"invalid_request","error_description":"AADSTS90011: 'redirect_uri' 值必须是有效的绝对 Uri。\r\n跟踪 ID: 035a0c90-bc8f-444c-8723-e8d9aea033bb\r \n相关 ID: 58c6fc52-cf50-44ae-8622-cc4aa3259bac\r\n时间戳: 2014-09-22 17:08:02Z","error_codes":[90011],"timestamp":"2014-09-22 17: 08:02Z","trace_id":"035a0c90-bc8f-444c-8723-e8d9aea033bb","correlation_id":"58c​​6fc52-cf50-44ae-8622-cc4aa3259bac","submit_url":null,"context":null})
    • 糟糕,我之前没有注意到这一点。在多租户应用程序中,redirect_uri 值必须与 Azure AD 租户的名称相关。例如,如果您的租户是 contoso.com,则 redirect_uri 的格式必须为 contoso.com/<something>。我认为在这种情况下,您的租户名称是 crm4.dynamics.com。
    • 对不起,这也不对,我对 AppID URI 感到困惑。咖啡不够。等一下。
    • 你能检查一下你的代码是否对redirect_uri进行双URL编码吗?
    猜你喜欢
    • 1970-01-01
    • 2017-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-29
    • 2019-03-11
    相关资源
    最近更新 更多