c# - 在 MSAL 中获取 EWS 的委托(delegate)权限,无需 PublicClientApplicationBuilder 和 AcquireTokenInteractive

标签 c# azure office365 exchangewebservices azure-ad-msal

在 EWS OAuth 流程中,我们可以通过以下方式获取委托(delegate)权限:

var pcaOptions = new PublicClientApplicationOptions
{
    ClientId = ConfigurationManager.AppSettings["appId"],
    TenantId = ConfigurationManager.AppSettings["tenantId"]
};

var pca = PublicClientApplicationBuilder
    .CreateWithApplicationOptions(pcaOptions).Build();

// The permission scope required for EWS access
var ewsScopes = new string[] { "https://outlook.office.com/EWS.AccessAsUser.All" };

// Make the interactive token request
var authResult = await pca.AcquireTokenInteractive(ewsScopes).ExecuteAsync();

以上代码打开用于输入用户名/密码的对话框。

有什么方法可以通过在代码本身中提供凭据来绕过对话框并请求 token ,但仅具有委派权限

最佳答案

是的,你说的是ROPC https://learn.microsoft.com/en-us/azure/active-directory//develop/v2-oauth-ropc 。由于直接处理凭据存在信任问题,通常不鼓励以这种方式使用凭据。您需要确保的一件事是在您的应用程序注册中您有

Treat application as a public client.

选择“身份验证”标签(位于最底部)

代码请查看 https://github.com/AzureAD/microsoft-authentication-library-for-dotnet/wiki/Username-Password-Authentication例如

NetworkCredential Credentials =  new NetworkCredential(UserName,Password); 
pca.AcquireTokenByUsernamePassword(ewsScopes,Credentials.UserName, Credentials.SecurePassword).ExecuteAsync();

如果您正在寻找更安全的方式,请考虑使用托管身份 https://learn.microsoft.com/en-us/azure/active-directory/managed-identities-azure-resources/overview

关于c# - 在 MSAL 中获取 EWS 的委托(delegate)权限,无需 PublicClientApplicationBuilder 和 AcquireTokenInteractive,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61018045/

相关文章:

c# - 在 C# 中运行 PowerShell cmdlet

azure - 将 Azure AD 用户同步到本地 AD

javascript - Kendo Grid 中的日期字段在 Controller 上为空

c# - 获取 WPF ComboBox 中所选项目的标签

c# - 标准方法与扩展方法

Azure Active Directory OAuth 2.0 授权给出错误请求

python - 使用 python api O365 接收电子邮件

c# - 如何终止嵌套循环中的外循环?

azure - 如何列出 Azure ML 数据集中的所有可用数据集版本并获取数据集最新版本之前的版本

azure - 使用 ARM 模板创建用户管理的身份和服务器管理员