C# 在MSAL中获取不带PublicClientApplicationBuilder和AcquireTokenInteractive的EWS的代理权限

C# 在MSAL中获取不带PublicClientApplicationBuilder和AcquireTokenInteractive的EWS的代理权限,c#,azure,office365,exchangewebservices,msal,C#,Azure,Office365,Exchangewebservices,Msal,在EWS OAuth流程中,我们可以通过以下方式获得委托权限: var pcaOptions = new PublicClientApplicationOptions { ClientId = ConfigurationManager.AppSettings["appId"], TenantId = ConfigurationManager.AppSettings["tenantId"] }; var pca = PublicClientApplicationBuilder

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

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();
上面的代码打开了输入用户名/密码的对话框


是否有任何方法可以通过在代码中提供凭证来绕过对话框和请求令牌,但仅使用委派权限

是的,您所说的是ROPC。通常不鼓励以这种方式使用凭据,因为直接处理凭据存在信任问题。您需要确保的一件事是,在您的申请注册中

将应用程序视为公共客户端

在身份验证标签中选择(从最底部开始)

有关代码,请参阅eg


如果你在寻找更安全的方式,请考虑使用托管标识

谢谢,指导这个。最后,我们还将评估SecretentialClientApplicationBuilder是否能够获得具有完全访问权限的令牌。如果您尝试过此方法的刷新令牌机制,MS docs似乎对为守护程序应用刷新令牌有点困惑。MSAL应该为您处理刷新令牌的操作(例如,即使返回刷新令牌,在中也不会公开刷新令牌)。(但就我个人而言,我还没有用应用程序代币测试这一部分)
NetworkCredential Credentials =  new NetworkCredential(UserName,Password); 
pca.AcquireTokenByUsernamePassword(ewsScopes,Credentials.UserName, Credentials.SecurePassword).ExecuteAsync();