我们的应用程序将做简单的User.ReadBasic.All函数,根据我的理解,它不需要管理员权限。 使用流记录在这里:https://graph.microsoft.io/en-us/docs/authorization/app_onlyAuthorization_IdentityNotFound错误MS Graph API
POST https://login.microsoftonline.com/{tenantId}/oauth2/token HTTP/1.1
Content-Type: application/x-www-form-urlencoded
grant_type=client_credentials
&client_id=<clientId>
&client_secret=<clientSecret>
&resource=https://graph.microsoft.com
我能够调用返回以下错误消息的图形时,获得一个有效的访问令牌,但是:
“code": "Authorization_IdentityNotFound", "The identity of the calling application could not be established."
我们已经建立了我们的应用程序在管理控制台中拥有User.ReadAll.Basic权限,有趣的是,当我使用我自己的凭证/令牌缓存启动具有appId和Secret的ConfidentialClientApplication实例时,我确实从API获得了成功的结果,并且为令牌调用AcquireTokenSilentAsync:
string signedInUserID = ClaimsPrincipal.Current.FindFirst(ClaimTypes.NameIdentifier).Value;
tokenCache = new SessionTokenCache(
signedInUserID,
HttpContext.Current.GetOwinContext().Environment["System.Web.HttpContextBase"] as HttpContextBase);
ConfidentialClientApplication cca = new ConfidentialClientApplication(
appId,
redirectUri,
new ClientCredential(appSecret),
tokenCache);
但是我们正在创建一个无状态,无头的服务,它将没有用户交互,因此理想情况下我们不想回复用户凭证和令牌缓存以检索访问令牌。我不确定为什么一个场景有效,另一个是返回IdentityNotFound错误,并且您有任何建议都是值得欢迎的。
你能解决这个问题吗?我有同样的问题 – NBajanca
嗨@NBajanca是这是一个关于我们试图访问的特定范围管理员权限的问题。一旦我们的应用程序被授予访问管理员读取我们租户中的目录数据,我们就可以通过应用程序身份查询(我们决定使用比应用程序秘密更安全的证书)让我知道如果您有任何其他问题 – ranah
谢谢,同时我也发现了这一点。我在Microsoft图形文档中创建了一个问题,看看他们是否可以更好地解释范围 – NBajanca