AAD 应用程序中访问图形 API -checkMemberGroups 所需的最低权限集是多少?
这是我尝试使用的权限列表。这个集合可以进一步减少吗?我是否缺少任何强制性权限?
委派权限 -
微软图形 API
阅读所有用户的完整资料
阅读所有组
以登录用户身份访问目录
登录并阅读用户资料
Windows Azure 活动目录
阅读所有组
以登录用户身份访问目录
登录并阅读用户资料
作为企业,我们希望使用Azure AD B2C,并且我们有内部和外部用户。
Azure AD 帮助我们管理我们的 Azure 用户、企业用户,我们甚至可以使用 x@.onmicrosoft.com 电子邮件添加用户。
当我们想为我们的消费者使用 Azure AD B2C 时。所以我们有 2 个选择来添加我们的用户,即本地用户和外部用户(Facebook、Google 等)
如果本地用户属于我们公司,则可以使用 Azure AD B2C 门户创建用户。
但是当我们尝试创建拥有另一种电子邮件的 Azure AD B2C 用户时,我们需要使用我们自己的应用程序,该应用程序正在使用 Graph API。(即 Azure 门户限制)
问题是我们很难在登录后获取用户值,因为他们是使用 Gmail 或 x 电子邮件的本地用户。
我们使用 MSAL 来获取相关信息,而不是 ADAL。
我们已经启用了范围并启用了 API 访问,但这是我们得到的错误。
获取弹出窗口:AADB2C90055:请求中提供的范围“openid email openid profile”必须指定一个资源,例如“ https://example.com/calendar.read ”。
关联 ID:86d6ff41-1cef-4ba1-9b26-2aa281c92ccd
时间戳:2017-09-15 10:22:20Z
invalid_request 登录时出错:AADB2C90117:不支持请求中提供的范围“user_impersonation”。
关联 ID:785c6487-cd7f-4750-a769-deb477cb4ba4
时间戳:2017-09-15 10:32:39Z
:无效请求
获取弹出窗口时出错:AADB2C90055:请求中提供的范围“电子邮件 …
azure azure-active-directory azure-ad-graph-api azure-ad-b2c
我们正在尝试以编程方式(Powershell 或 C#/.NET)向 AAD B2C 注册应用程序,以便在自动租户创建期间从 azure 自动化创建和部署应用服务 Web 应用程序。鉴于 AAD B2C Graph API 的上下文似乎是要走的路。
是否可以向 AAD B2C 添加应用程序?
如果是,通过什么技术(vanilla REST?我们找不到特定于 AAD B2C 应用程序的文档)?
到目前为止,我们尝试使用Azure AD 2.0 预览版中的 Graph API以及Graph Client。
在确定创建应用程序的步骤需要具有全局管理员权限的服务主体(我们希望进一步限制权限)后,我们面临的问题是应用程序没有出现在 B2C 中,但出现在Azure的 AAD 部分门户网站。
我们通过 powershell 添加的尝试之一(我们尝试设置所有参数以密切匹配在门户B2C 租户管理刀片中手动创建的应用程序):
New-AzureADApplication -DisplayName $tenantCname -IdentifierUris "https://$tenantCname.$aadTenant.onmicrosoft.com" -ReplyUrls $tenantUrl -AvailableToOtherTenants $true -Oauth2AllowImplicitFlow $true -PublicClient $false
Run Code Online (Sandbox Code Playgroud)
命令成功,但应用程序未显示在AZURE AD B2C 设置 > 设置 > 应用程序下的门户中,但仅显示在Azure Active Directory/应用程序注册中。鉴于两个刀片都与同一个目录相关,我们不确定我们的应用程序创建与交互式应用程序的区别。
我们还缺少其他任何步骤吗?特定属性/扩展?
azure azure-active-directory azure-ad-graph-api azure-ad-b2c
我有一个使用 NodeJS + ReactJS 创建的项目应用程序,我想要的只是使用 Azure AD 来验证用户身份并使用 Azure 的 Graph API 获取他的数据,如姓名、组、图片、职业等。
我已经在 Azure 门户上正确配置了 Azure AD 和应用程序。包括权限委派和所有这些员工。
我试图了解如何做到这一点但没有成功。我一直试图在 google、StackOverflow、Microsoft 文档,甚至项目示例上找到。
一些示例已经工作,但没有一个我可以理解并放入我的项目中作为生产应用程序工作。
我已将其用于对用户进行身份验证,但返回的 AccessToken 对调用 Graph API 无效:
passport.use(new OIDCStrategy({
redirectUrl: config.creds.returnURL,
realm: config.creds.realm,
clientID: config.creds.clientID,
clientSecret: config.creds.clientSecret,
oidcIssuer: config.creds.issuer,
identityMetadata: config.creds.identityMetadata,
skipUserProfile: config.creds.skipUserProfile,
responseType: config.creds.responseType,
responseMode: config.creds.responseMode,
allowHttpForRedirectUrl: config.creds.allowHttpForRedirectUrl
},
function(iss, sub, profile, accessToken, refreshToken, done) {
console.log(accessToken);
profile = profile._json;
if (!profile.email) {
return done(new Error("No email found"), null);
}
// asynchronous verification, for effect...
process.nextTick(function () …Run Code Online (Sandbox Code Playgroud) TL;TR 我们正在使用 Microsoft Graph API 创建 AAD 应用程序。该应用程序有一些requiredResourceAccess条目,其中需要访问 microsoft graph。创建应用程序后,我们希望使用appRoleAssignments对象将角色分配给服务主体。该对象需要resourceId,它是我尝试确定的 objectId(例如 Microsoft 图形的)。
我们正在使用 Graph API 本身来获取服务主体:https://graph.windows.net/<tenant>/servicePrincipals?api-version=1.6但不知何故缺少Microsoft Graph:
Windows Azure Active Directory
Microsoft App Access Panel
Azure Classic Portal
Microsoft.SMIT
Office 365 Configure
Windows Azure Service Management API
Microsoft.SupportTicketSubmission
Azure ESTS Service
Signup
Microsoft password reset service
Run Code Online (Sandbox Code Playgroud)
我需要确定的ObjectId中的微软图形服务主体。从新的 AAD 开始,似乎没有 Microsoft Graph Principal:
Get-MsolServicePrincipal -AppPrincipalId 00000003-0000-0000-c000-000000000000
Run Code Online (Sandbox Code Playgroud)
输出
Get-MsolServicePrincipal : Service principal was not found.
Run Code Online (Sandbox Code Playgroud)
如何确定 …
使用此处记录的扩展 API:
结合 B2C Graph Client 示例:
我通过 AD Graph API 使用此 API 为目录架构扩展创建了一个自定义属性:
POST
https://graph.windows.net/contoso.onmicrosoft.com/applications/<applicationObjectId>/extensionProperties?api-version=1.6
{
name: "OrgRoleId",
dataType: "String",
targetObjects: [
"User"
]
}
Run Code Online (Sandbox Code Playgroud)
(注意我将 API 版本更改为 1.6)。
API 创建的自定义属性使用 B2CGraphClient 示例显示,并且具有与通过 Azure 门户注册的 B2C 相同的数据。
但是,这些 API 创建的自定义属性不会出现在租户的 Azure 门户“用户属性”边栏选项卡中,而通过 Azure 门户为 B2C 租户创建的自定义属性会出现。
请注意,我可以为用户成功读取和写入这些扩展值(通过 Graph API)。我只是无法将它们放入声明中,因为它们不会出现在“用户属性”边栏选项卡上,也不会出现在 Azure 门户中的策略声明边栏选项卡上,因此它们不会作为声明添加到令牌中。
我错过了什么/做错了什么?
从 输出B2C.exe Get-extension-attribute <b2c-extensions-app objectId>。*_Test1出现(创建门户),而*_UserRoleId没有出现(创建API):
{
"odata.metadata": "https://graph.windows.net/<tenant_id>/$metadata#directoryObjects/Microsoft.DirectoryServices.ExtensionProperty",
"value": [
{
"odata.type": "Microsoft.DirectoryServices.ExtensionProperty",
"objectType": "ExtensionProperty",
"objectId": "f58bc813-632c-486b-bff1-61695eeab691", …Run Code Online (Sandbox Code Playgroud) azure azure-active-directory azure-ad-graph-api azure-ad-b2c
我正在 Azure AD B2C 中创建一个 API 项目,我想在其中创建自定义 UI。对于这个要求,我想知道在“Rest”API 和“Graph”API 中哪个更好。
任何人都可以向我建议,哪个更好用?
我正在尝试通过 Azure Graph API 访问有关 AD 网络上用户的一些信息。代码如下所示:
from azure.common.credentials import ServicePrincipalCredentials
from azure.graphrbac import GraphRbacManagementClient
TENANT = 'something.onmicrosoft.com'
TENANT_ID = '...'
CLIENT_ID = '...'
SECRET = '...'
credentials = ServicePrincipalCredentials(
client_id=CLIENT_ID,
secret=SECRET,
tenant=TENANT,
)
client = GraphRbacManagementClient(credentials, TENANT_ID)
client.users.list().next()
Run Code Online (Sandbox Code Playgroud)
凭据不会失败,但无论如何我都会收到以下错误:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/ifs/home/.../.local/lib/python2.7/site-packages/msrest/paging.py", line 121, in __next__
self.advance_page()
File "/ifs/home/.../.local/lib/python2.7/site-packages/msrest/paging.py", line 107, in advance_page
self._response = self._get_next(self.next_link)
File "/ifs/home/.../.local/lib/python2.7/site-packages/azure/graphrbac/operations/users_operations.py", line 158, in internal_paging
raise models.GraphErrorException(self._deserialize, response)
azure.graphrbac.models.graph_error.GraphErrorException: Access Token missing …Run Code Online (Sandbox Code Playgroud) 我想向管理员通过图形 API 管理的某些特定用户的令牌添加自定义声明。
基本场景如下:
用户已注册我的应用程序。最初,所有用户对资源的访问权限都是有限的。作为管理员,我将通过添加特定声明来更新一些用户,以便我的应用程序将授权用户使用特定资源。
在我的理解中,有几种方法可以在令牌中包含声明(扩展属性)。
通过 azure 门户创建用户属性,并在注册策略中使用它来收集用户的值。就我而言,自定义属性将仅由管理员应用,因此我不会让用户管理此声明。所以这对我来说不是一个好方法,对我来说也没有意义,因为我会在许多用户已经注册后添加新属性,所以将无法收集这些信息。
另一种方式是通过Graph Api添加扩展属性。要完成它,我需要创建一个新应用程序(通过应用程序注册)并通过图形 API 向该应用程序注册扩展属性。然后通过在该应用程序中添加新创建的扩展属性来更新用户(通过图形 API)。最后,我希望这个扩展属性会出现在我的令牌中,但没有机会。它在门户网站、令牌中不可见,但仅在图形 API 响应中可见。
创建我不会的自定义策略,因为不建议非专家使用。
我在第二个解决方案中缺少什么?
我们在 .NET Core 2.1上运行,在运行以下查询时有时会出现异常“此平台不支持安全二进制序列化”:
await _adClient.Users[userId].AppRoleAssignments.ExecuteAsync();
Run Code Online (Sandbox Code Playgroud)
重新执行查询通常有效,因此满足某些条件,即在后续请求中未尝试(或成功?)二进制序列化?也就是说,如果我重新启动服务,它通常也会对第一个请求起作用。
我们正在使用旧的 AD Graph 客户端,因为 1) Microsoft Graph 客户端尚不完全支持AppRoleAssignments,2) 支持的内容是测试版的一部分,不建议用于生产用途。
完整的调用堆栈如下:
System.Data.Services.Client.BaseAsyncResult.EndExecute<T>(object source, string method, IAsyncResult asyncResult)
System.Data.Services.Client.QueryResult.EndExecuteQuery<TElement>(object source, string method, IAsyncResult asyncResult)
System.Data.Services.Client.DataServiceRequest.EndExecute<TElement>(object source, DataServiceContext context, string method, IAsyncResult asyncResult)
System.Data.Services.Client.DataServiceQuery<TElement>.EndExecute(IAsyncResult asyncResult)
Microsoft.Azure.ActiveDirectory.GraphClient.Extensions.DataServiceContextWrapper+<>c__DisplayClass4c<TSource, TInterface>.<ExecuteAsync>b__4a(IAsyncResult r)
System.Threading.Tasks.TaskFactory<TResult>.FromAsyncCoreLogic(IAsyncResult iar, Func<IAsyncResult, TResult> endFunction, Action<IAsyncResult> endAction, Task<TResult> promise, bool requiresSynchronization)
Microsoft.Azure.ActiveDirectory.GraphClient.Extensions.DataServiceContextWrapper.ExecuteAsync<TSource, TInterface>(DataServiceQuery<TSource> inner)
Microsoft.Azure.ActiveDirectory.GraphClient.AppRoleAssignmentCollection.<ExecuteAsync>b__2()
Merck.SeaMonkey.Api.AzureADApi.Controllers.UserController.GetApplicationRoleAssignments(string userId) in UserController.cs
Run Code Online (Sandbox Code Playgroud)
新的 Microsoft Graph 客户端不是这里的一个选项,尽管我想我们可以下拉到基本 REST 接口,这对我们依赖于图客户端的所有重试逻辑、结果解析等有点工作去做。
更新:给出异常的来源,我们假设在序列化 OData 响应中的实体时存在问题。但是,使用 AD Graph Explorer,我们会看到一个非常简单的响应,即空值数组以及指向实体元数据文档的链接。我们通过删除和添加新的应用程序角色分配使问题经常再次发生,但我们不能强制它 100% 可靠地发生。看起来某些状态正在损坏,也许在某些内部缓存中?
c# azure-ad-graph-api asp.net-core microsoft-graph-sdks microsoft-graph-api
azure ×8
azure-ad-b2c ×5
asp.net-core ×1
c# ×1
node.js ×1
passport.js ×1
powershell ×1
python ×1
reactjs ×1
rest ×1