我正尝试连接到网上进行交流,并使用Microsoft Graph API 1.0对电子邮件进行某些操作,而所有这些操作都是在恶魔程序中完成的。我正在使用Client Credential工作流进行身份验证,下面是一小段代码
AuthenticationContext authenticationContext = new AuthenticationContext(string.Format(CultureInfo.InvariantCulture, azureEndPoint, tenant));
ClientCredential clientCredential = new ClientCredential(clientId, clientSecret);
AuthenticationResult authenticationResult = await authenticationContext.AcquireTokenAsync(resource, clientCredential);
但是要使此代码返回身份验证令牌,我必须针对Microsoft graph api获得针对Azure应用ID的Application Permissions。需要说明的是,如果授予了许可,则应用程序ID将有权访问组织中所有用户的电子邮件,因此,租户管理员严格拒绝授予许可。
我尝试了使用同意框架的运气,但这需要用户干预才能输入他/她的ID和密码,这在使用恶魔程序的情况下是不可能的。我读过以下类似的博客,但最终都输入了用户ID密码来访问重定向网址,从而使整个恶魔事件https://blogs.msdn.microsoft.com/exchangedev/2015/01/21/building-daemon-or-service-apps-with-office-365-mail-calendar-and-contacts-apis-oauth2-client-credential-flow/
失效。我是否可以通过任何方式为租户中的特定电子邮件ID授予对Azure应用程序ID的读/写访问权限?还是可以选择一种无需用户干预即可以某种方式进入邮箱的聪明方法?
预先感谢
Vivek
答案 0 :(得分:0)
您只能将应用程序权限与客户端证书授予流程一起使用。
要仅访问特定用户的电子邮件,您必须采取其他方法。 这确实需要每个用户分别同意。
让用户登录到您的应用,需要征得其访问电子邮件的同意。 返回您的应用后,获取刷新令牌并将其安全存储。 刷新令牌是特定于用户的。 然后,在守护程序服务中,您将使用其刷新令牌为每个用户获取访问令牌。 如果由于刷新令牌无效使获取失败, 需要通知用户再次登录。
答案 1 :(得分:0)
现在已解决此问题,因为Microsoft引入了一种新概念,即使用组策略将应用程序权限限制到特定邮箱或一组邮箱。在这里https://docs.microsoft.com/en-us/auth-limit-mailbox-access