【问题标题】:Get delegate permission in MSAL for EWS without PublicClientApplicationBuilder and AcquireTokenInteractive在没有 PublicClientApplicationBuilder 和 AcquireTokenInteractive 的情况下在 MSAL 中为 EWS 获取委托权限
【发布时间】:2020-04-06 10:06:20
【问题描述】:

在 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();

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

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

【问题讨论】:

    标签: c# azure office365 exchangewebservices msal


    【解决方案1】:

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

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

    在身份验证标签中选择(它在最底部)

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

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

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

    【讨论】:

    • 感谢您对此提供指导。最终,我们还在评估 ConfidentialClientApplicationBuilder 以获取具有 full_access_as_app 权限的令牌。您是否尝试过这种方法的刷新令牌机制,MS 文档似乎对于为 Daemon 应用程序刷新令牌有点混乱。
    • MSAL 应该为您处理刷新令牌(例如 in 不会公开刷新令牌,即使它被返回)。 (但就我个人而言,我没有使用应用令牌测试这部分)
    猜你喜欢
    • 1970-01-01
    • 2023-03-10
    • 1970-01-01
    • 2020-12-21
    • 1970-01-01
    • 1970-01-01
    • 2016-04-14
    • 2021-09-06
    相关资源
    最近更新 更多