【问题标题】:working example of OnBehalfOfProfider for a daemon app calling MS GraphOnBehalfOfProfider 的工作示例,用于调用 MS Graph 的守护程序应用程序
【发布时间】:2021-01-26 10:44:17
【问题描述】:

我很难找到适合这种情况的工作示例:

IConfidentialClientApplication confidentialClientApplication = ConfidentialClientApplicationBuilder
.Create(clientId)
.WithRedirectUri(redirectUri)
.WithClientSecret(clientSecret)
.Build();

OnBehalfOfProvider authProvider = new OnBehalfOfProvider(confidentialClientApplication, scopes);

我面临的问题: 1.我从什么包中获得 OnBehalfOfProfider? 2.假设我必须获得一个 AAD 用户的访问令牌,而没有用户的实际登录(它是一个守护程序应用程序) - 我如何构建 UserAssertion 实例?

此处的信息基于两个来源: MSDN '以提供商名义'https://docs.microsoft.com/en-us/graph/sdks/choose-authentication-providers?tabs=CS#OnBehalfOfProvider 还有github的'如何调用OBO'https://github.com/AzureAD/microsoft-authentication-library-for-dotnet/wiki/on-behalf-of

谢谢 艺术

【问题讨论】:

    标签: microsoft-graph-api microsoft-identity-platform auth0-delegated-admin authprovider


    【解决方案1】:

    当您有一个 API 接收包含用户信息的访问令牌,并且您想以该用户的身份调用另一个 API 时,使用代表流。 这听起来不像你的情况。

    这听起来更像是一种无人值守的后台访问场景。 基本上有两种选择:

    1. 使用刷新令牌流
    2. 使用客户端凭据流
    3. 使用 ROPC 流

    第一种方法更复杂,但推荐用于非关键流程。 MSAL 确实简化了很多。 它的工作方式:

    1. 用户对您的应用进行身份验证,例如授权码流程
    2. MSAL 将刷新令牌存储在良好的令牌缓存(数据库/Azure Key Vault 等)中,您需要对此进行配置
    3. 您的后台处理器使用相同的令牌缓存,允许它使用刷新令牌来获取新令牌

    这种方法的缺点是它有点复杂,并且刷新令牌可能会过期,需要用户重新进行身份验证。

    第二种方法更简单,但需要使用应用程序权限而不是委托权限。 使用客户端凭据,您的应用程序需要自行访问所有数据,无需任何用户。 因此,这需要大量访问并依赖于支持这种方法的 API。 但它简单可靠。

    我不推荐第三种方法。 它要求您使用用户的用户名和密码来获取用户的令牌。 您不仅需要存储用户的密码,如果用户启用了多因素身份验证,它根本不起作用,是访客用户等。

    【讨论】:

    • juunas,我的场景和你描述的很接近,但不完全一样,这里我想做的是:1.用户登录到一个网络应用程序(旧学校用户名/登录); 2.我们信任我们的应用程序,我们一对一地知道用户在 AAD 中的身份,但我们不想向用户询问其他登录信息……; 3.我们需要调用没有应用权限的MS Graph/Teams端点(发送聊天); 4.我们使用我们的 AAD 注册应用程序创建团队、频道、向他们添加 AAD 成员......在应用程序权限模式下。我们被困在第 3 步。“代表我们信任的用户”调用 MS Graph。
    • 我所描述的选项就是为此的选项。您不能只对 AAD 说“给我一个用户 X 的令牌”。
    猜你喜欢
    • 2017-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多