我实际上能够设置这个场景,但Azure门户中有一个非常令人困惑的部分,我只能用PowerShell修复,我想问一下:这个行为是设计还是有其他部分我可以在不使用PowerShell的情况下进行此配置的门户网站?
好的,步骤来创建这个场景:
更新应用程序B的清单,添加新的appRole,即“管理员”#39;允许的类型是"用户"和#34;申请" 请参阅:https://msdn.microsoft.com/Library/Azure/Ad/Graph/api/entity-and-complex-type-reference#approle-type
在租户中注册应用程序A(隐式创建服务主体)
转到应用程序A所需的权限刀片。
问题1:为什么角色只出现在应用程序权限部分而不是委派权限?
我将appRole设置为" application"或"用户"但它只会显示在"应用程序权限中#34;用户体验的第二个。我的理解是,如果您使用刷新令牌代表用户请求令牌,那么您使用委派权限部分,如果您使用秘密或证书请求令牌,则应获得应用程序权限。
现在,选择' admin'来自应用B的申请许可并保存
您可以验证此更新应用程序A清单中的requiredPermissions
秒,以包含应用B中的管理员角色。
现在我转到我的应用程序代码并使用ADAL获取令牌,例如:
var authenticationContext = new
AuthenticationContext("https://login.windows.net/<tenant-id>",
TokenCache.DefaultShared);
var clientCredential = new ClientCredential("<app-A-app-id>", "<app-A-key");
var authenticationResult = authenticationContext.AcquireTokenAsync("<app-b-
resource-id/app-id-url>", clientCredentials);
authenticationResult.AccessToken
现在,将令牌转到jwt.io进行检查,我希望令牌中包含"roles": [ "admin" ]
声明,但事实并非如此。此时我尝试返回B的清单添加自定义oauth2Permissions
(请参阅:https://msdn.microsoft.com/Library/Azure/Ad/Graph/api/entity-and-complex-type-reference#oauth2permission-type),然后更新A以要求这些,但是再次生成了一个新令牌并且它没有&#39;将这些作为范围列在令牌中。
在我开始使用PowerShell进行调查之前,我一直都很难过。
如果您使用此处的代码段:
Get-AzureADServiceAppRoleAssignment -ObjectId $spA.ObjectId
它什么都没有!即使我已经去了应用程序所需的权限并从B中选择了角色!
这带来问题2: 如果不创建应用角色分配,在门户网站中选择应用程序权限是什么意思?
我使用以下方法手动创建角色分配: `New-AzureADServiceAppRoleAssignment -Id $ role.ObjectId -PrincipalId $ spA.ObjectId -ResourceId $ spB.ObjectId -ObjectId $ spA.ObjectId 这转化为创建“管理员”的角色分配。当服务主体A请求资源/服务主体B的标记时。
问题3:为什么我们需要同时指定ObjectId和PrincipalId作为原则A的对象id?
问题4:如果可能,如何在门户网站中创建应用程序角色分配?
由于明确设置应用程序A对B所需的权限对令牌没有任何影响。我确认即使删除了所有必需的权限,(不依赖于B)我仍然可以获得带有A凭据的B资源的令牌。 问题5:这是否意味着租户中的任何应用都可以为租户中的任何其他应用请求令牌? 我之前的理解是,应用程序A必须在它能够请求令牌的应用程序上明确设置所需的权限。
例如,如果您希望web api向microsoft graph api发出请求,那么您是否应该声明这一点?
答案 0 :(得分:3)
为什么角色只出现在应用程序权限部分而不是委派权限?
因为appRole永远不是委托权限。可以通过将应用程序角色分配给应用程序并为其选择角色来将其分配给用户。它用于在某个应用中为某些用户/组提供某些角色。
如果您需要委派权限,则定义oauth2Permission。
如果Portal中没有创建应用程序角色分配,那么在Portal中选择应用程序权限意味着什么?
它只设置所需的权限。要创建应用角色分配,您必须以管理员身份授予权限。这可以通过门户中的“授予权限”按钮完成,也可以在Azure AD中签名时使用prompt=admin_consent
完成。
为什么我们需要同时指定ObjectId和PrincipalId作为原则A的对象id?
实际上,当通过Graph API手动创建应用程序角色分配时,您不必指定ObjectId。它是强制性的PowerShell吗?
如果可能,如何在门户网站中创建应用程序角色分配?
上面回答,运行管理员同意。
这是否意味着租户中的任何应用都可以为租户中的任何其他应用请求令牌?
这个我实际上不确定,必须稍后测试。但无论如何,令牌中不会有任何角色吗?所以你的授权应该阻止它吗?