小编Ole*_*sii的帖子

如何在服务/守护程序应用程序中获取 EWS 托管 API 的 OAuth2 访问令牌

设想

我在 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.Allscope。但是我没有在门户网站上找到这样一个 URL 的许可。我发现只有在以下权限Office 365 Exchange Online> Application permissions> Mail

  1. https://outlook.office365.com/Mail.Read 允许应用在没有登录用户的情况下阅读所有邮箱中的邮件
  2. https://outlook.office365.com/Mail.ReadWrite 允许应用在没有登录用户的情况下创建、读取、更新和删除所有邮箱中的邮件。

我添加了它们并为所有用户授予管理员同意。

获取访问令牌

出于测试目的和简单起见,我没有使用任何身份验证库(ADAL、MSAL 等)。我使用 Postman 获取访问令牌,然后token …

c# exchangewebservices oauth-2.0 office365

7
推荐指数
2
解决办法
1万
查看次数

如何以编程方式更改DCOM配置标识

有没有办法以编程方式获取有关启动DCOM应用程序身份的信息.看附图了解我的意思.

屏幕截图,包含DCOM Config的应用程序属性

我试图使用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 +应用程序

我是COM,DCOM,COM +的新手,确信我错过了一些重要的东西.

过了一会儿,我发现为什么我曾经在第一种方法(ManagementObject)中得到NULL.您将收到:

  • 如果标识当前设置为启动用户,则为NULL
  • "交互式用户"中的"交互式用户"
  • 在第三个选项的情况下使用用户名的一些字符串(参见第一张图片)

但我还是需要一种方法来改变MMC中DCOM Config节点下的Microsoft PowerPoint Slide等项目的身份.

c# wmi dcom com+ mmc

6
推荐指数
1
解决办法
3308
查看次数

在 OAuth 2.0 资源所有者密码凭据授权期间向公共客户端提供刷新令牌是否可以?

我的场景

我有以下软件片段/部分:

  • 具有 Windows 服务的专用服务器,该服务通过 OAuth 2.0 授权公开 REST API。
  • 类型 1 客户端:使用 REST API 的不同服务器上的服务。只有组织管理员才能访问这些服务器。
  • 类型 2 客户端:调用 REST API 的桌面应用程序。

根据 RFC 6749,类型 1 客户端是机密的,类型 2 客户端是公开的。

已决定在第一个版本中对两种类型的客户端使用资源所有者密码凭据授权。对于类型 1 客户端来说,这似乎没问题,因为它们能够维护其凭据的机密性,并且无法使用授权代码授予(没有交互式用户)。

授权详情

  • 授权端点将访问令牌和刷新令牌返回给类型 1 和类型 2 客户端。
  • 所有客户端(类型 1 和类型 2)都可以使用刷新令牌来获取新的访问和刷新令牌。

问题/困境/问题

公共客户没有秘密。这意味着如果任何人获得刷新令牌和客户端 ID(最后一个不安全),那么他可以使用它来获取新的访问令牌并使用 REST API。

  1. 从安全角度来看,可以为类型 2 客户端(公共)生成刷新令牌吗?或者,如果使用资源所有者密码凭据授权授予,我不得返回刷新令牌以及类型 2 客户端的访问令牌。
  2. 2 类客户,他们真的是公开的吗?我可以将桌面客户端视为机密并为其生成机密吗?桌面应用程序将从配置文件中读取客户端机密(将使用 AES 256 加密),该文件由管理员分发给组织网络内的用户计算机?

rest oauth-2.0 refresh-token

5
推荐指数
1
解决办法
2173
查看次数

标签 统计

c# ×2

oauth-2.0 ×2

com+ ×1

dcom ×1

exchangewebservices ×1

mmc ×1

office365 ×1

refresh-token ×1

rest ×1

wmi ×1