AcquireTokenAsync返回" invalid_grant"," AADSTS65001"

时间:2017-03-14 06:35:12

标签: azure asp.net-web-api adal

我尝试从基于站点的WebService调用Azure托管WebAPI。 基于站点的服务是adal-angluar SPA,然后必须调用Azure中托管的其他API。 来自AAD的承载令牌已成功传递到基于站点的Web API,然后必须代表用户获取新令牌以调用下游API,如下例所示:
https://github.com/Azure-Samples/active-directory-dotnet-webapi-onbehalfof

示例中的下游API为https://graph.windows.net。并将其作为resourceId传递给AcquireTokenAsync调用。

就我而言,下游API是我正在编写的Azure应用程序,因此我可以完全控制它。

我遇到的问题是' invalid_grant'从我的基于api的api中的AcquireTokenAsync调用返回,该api试图代表登录用户获取新令牌。

基于网站的网络应用程序在Azure中创建了一个appid,并尝试获取新令牌,如下所示:

public

所以我的问题是,在Azure中需要实现哪些安全性来获取令牌?我已经读过需要更新下游API的应用程序清单,以将基于站点的应用程序包含为“已知的客户端应用程序”。这是对的吗?

对于我的下游网络API,我的resourceId应该是什么样的?

我可以在不将我的下游Web Api部署到Azure的情况下测试所有这些吗?我希望能够在本地调试所有这些,包括安全性。

感谢。

2 个答案:

答案 0 :(得分:0)

knownClientApplications数组包含应用程序的客户端ID,这些应用程序是已知客户端。这意味着当用户首次同意您的前端应用时,除了前端应用的要求之外,它还会显示API的权限要求。您无需单独同意API,这通常是不需要的。这样他们就会同意并立即授予权限。

您可以在Azure门户中找到的资源ID。只需找到您的API的应用程序,转到属性,然后找到应用程序ID URI:

Azure AD App Properties

通常,App ID URI(或资源URI)的格式为 https://your-domain-name.com/AppName 。多租户应用程序的重要位置是URI中的域必须是Azure AD中的已验证域。

是的,您可以在本地环境中测试所有内容。只要您将回复URL指定为localhost等,您就应该好好去。

很抱歉,我不确定为什么会收到无效的授权错误。

答案 1 :(得分:0)

要授予自定义应用程序权限以代表用户调用其他应用程序,您需要执行以下步骤:

  1. 在旧门户中找到自定义应用程序并打开 配置页面。
  2. 点击底部的添加应用程序 屏幕。
  3. 选择所有应用搜索您要提供的应用名称 访问,然后点击勾选添加。
  4. 选择“委派” 权限'在应用程序的权限部分5.列表项
  5. 点击保存。