.net ADAL获取无需用户的应用程序令牌

时间:2019-02-13 16:21:48

标签: c# .net adal azure-ad-graph-api

我正在尝试在没有当前用户的情况下获取该应用程序的令牌。我收到一条错误消息:

e.Message =“由于无法在缓存中找到令牌,因此无法静默获取令牌。调用方法AcquireToken”

下面是我用来获取令牌的代码。

ClientCredential clientcred = new ClientCredential(clientId, appKey);
AuthenticationContext authenticationContext = new AuthenticationContext(aadInstance + tenantId);
AuthenticationResult authenticationResult = await authenticationContext.AcquireTokenSilentAsync(graphResourceID, clientId);

return authenticationResult.AccessToken;

我的版本是:   

有人可以帮忙吗,我已经尝试了好几天了...我可以得到一个令牌,只是在为当前用户获取令牌时才找到,但是当我有后台处理程序时,例如从应用程序发送未经身份验证的电子邮件用户我无法获得令牌。

我的应用程序注册下的Microsoft Graph“应用程序-从任何用户发送电子邮件”的安全性设置,但我认为这还没有实现。 Windows Azure AD的安全已委派-登录并阅读用户配置文件。

谢谢

1 个答案:

答案 0 :(得分:0)

我已经弄清楚了令牌部分。因此,对于正在寻找此google的其他任何人,创建一个X509证书并将其添加到您的Azure清单中。然后,您可以使用x509证书创建ClientAssertionCertificate。然后在对AuthenticationContext.AcquireTokenAsync的调用中使用clientassertion。这似乎有效。我可以创建一个graphServiceClient。但是,当我尝试发送电子邮件时,出现权限错误:

用于提交此请求的用户帐户无权代表指定的发送帐户发送邮件。无法提交消息。

尽管具有权限应用程序-以任何用户身份发送邮件。有人有什么想法吗?