c# - Azure AD 租户 ID
问题描述
摘要: 如何动态获取 Microsoft 用户的租户 ID?
详细信息:我正在编写一个多租户应用程序(C# 和 .NET Core),我想使用它来创建订阅并注册更改通知。我正在使用 Microsoft Graph API v1.0 进行此操作。
我按照此文档获取服务帐户的访问令牌。注册应用程序并创建所需权限(例如,User.Read、Mail.ReadWrite)后,我们需要为它们授予管理员同意
要以编程方式执行此操作,
发送 GET 请求至:
https://login.microsoftonline.com/common/adminconsent?client_id={anyClientId}&state=12345&redirect_uri={redirectUrl}
这会将用户带到身份验证同意屏幕,询问请求的权限。
一旦授予,用户将从步骤 1 重定向到“redirectUrl”,并且tenantId 和 admin_consent 将出现在查询参数中,例如,
https://example.com/auth?admin_consent=true&tenant={corresponding_tenant_id}
然后可以使用此 tenantId 为 C# MVC 应用程序获取经过身份验证的 GraphClient。MSGraph SDK for .NET 参考
问题
有没有其他方法可以再次获取此tenantId 以供将来使用?我希望每次发出请求(登录除外)时都可以避免管理员同意流程。
再次需要租户 ID 的示例用例:
- 创建 GraphClient 以在邮箱上接收更改通知时获取特定消息。
解决方案
大多数情况下,您可以使用租户名称来替换租户 ID。并且,您可以从电子邮件地址中获取租户名称。
根据您的描述,您的应用程序将代表用户管理用户的邮箱。在这种情况下,您的应用程序将拥有用户的访问令牌。然后,您可以通过使用令牌向https://management.azure.com/tenants?api-version=2016-06-01发出 GET 请求来获取租户 ID 。
推荐阅读
- shell - Jenkins Pipeline 脚本 sh 命令中的变量值
- php - 如何在 PHP Laravel 中添加不同位置的水印图片?
- tomcat - 如何创建新内核 - Solr 3.x
- java - 一个 .java 文件中的两个默认访问类
- python - 如何在没有 gil (nogil) 的情况下在 cython cdef 中返回两个值
- android - 重新启动 Android Studio 时选定的构建变体发生变化
- big-o - 你如何用大 O、theta、omega 表示以 100 (n) 为底的对数
- c++ - C++ 比较共享指针堆栈
- angular - Angular 6:如何将脚本捆绑到库项目中?
- mysql - 反应提交到 Flask POST 方法不写入数据库(使用 Axios)