我在 Azure VM 上有一个 Exchange Online 环境和服务/daemin(无交互用户)应用程序。服务使用 EWS 托管 API 来处理任何租户用户邮箱中的电子邮件。现在 EWS 客户端使用基本身份验证,据 Microsoft 称,EWS 将不支持该身份验证来访问 Exchange Online。
因此,我需要找到一种方法来获取服务/守护程序应用程序的有效访问令牌以与 EWS 托管 API 一起使用。
以下文章展示了将 OAuth 2.0 与 EWS 托管 API 结合使用的示例。此示例有效,但它使用了不适合服务/守护程序应用程序场景的交互式方法来获得同意(出现登录表单,允许用户验证自己并授予应用程序请求的权限),因为没有交互式用户。
对于服务/守护程序应用程序,我需要使用client credential身份验证流程。
使用https://aad.portal.azure.com门户上的管理员帐户,我向 Azure Active Directory 注册了应用程序。为已注册的应用程序添加了客户端机密。
上述文章使用https://outlook.office.com/EWS.AccessAsUser.All的scope。但是我没有在门户网站上找到这样一个 URL 的许可。我发现只有在以下权限Office 365 Exchange Online> Application permissions> Mail:
https://outlook.office365.com/Mail.Read 允许应用在没有登录用户的情况下阅读所有邮箱中的邮件https://outlook.office365.com/Mail.ReadWrite 允许应用在没有登录用户的情况下创建、读取、更新和删除所有邮箱中的邮件。 我添加了它们并为所有用户授予管理员同意。
出于测试目的和简单起见,我没有使用任何身份验证库(ADAL、MSAL 等)。我使用 Postman 获取访问令牌,然后token …
有没有办法以编程方式获取有关启动DCOM应用程序身份的信息.看附图了解我的意思.

我试图使用WMI
ManagementObjectSearcher s = new ManagementObjectSearcher(new ManagementScope(@"\\.\root\cimv2"), new ObjectQuery(
"select * from Win32_DCOMApplicationSetting where AppID='{048EB43E-2059-422F-95E0-557DA96038AF}'"))
ManagementObjectCollection dcomSett = s.Get();
var value = dcomSett.Cast<ManagementObject>().ToArray()
[0].Properties["RunAsUser"].Value;
Run Code Online (Sandbox Code Playgroud)
但"RunAsUser"属性为空.也试过Interop.COMAdmin
COMAdmin.COMAdminCatalogClass catalog = (COMAdmin.COMAdminCatalogClass)new COMAdmin.COMAdminCatalog();
(COMAdmin.COMAdminCatalogCollection)catalog.GetCollection("Applications")
Run Code Online (Sandbox Code Playgroud)
通过这种方式,我设法获得MMC的"组件服务"管理单元中"COM +应用程序"节点下列出的应用程序:

我是COM,DCOM,COM +的新手,确信我错过了一些重要的东西.
过了一会儿,我发现为什么我曾经在第一种方法(ManagementObject)中得到NULL.您将收到:
但我还是需要一种方法来改变MMC中DCOM Config节点下的Microsoft PowerPoint Slide等项目的身份.
我有以下软件片段/部分:
根据 RFC 6749,类型 1 客户端是机密的,类型 2 客户端是公开的。
已决定在第一个版本中对两种类型的客户端使用资源所有者密码凭据授权。对于类型 1 客户端来说,这似乎没问题,因为它们能够维护其凭据的机密性,并且无法使用授权代码授予(没有交互式用户)。
授权详情
公共客户没有秘密。这意味着如果任何人获得刷新令牌和客户端 ID(最后一个不安全),那么他可以使用它来获取新的访问令牌并使用 REST API。