PHP Azure OAuth JWT应用程序角色

PHP Azure OAuth JWT应用程序角色,php,azure,oauth,jwt,azure-active-directory,Php,Azure,Oauth,Jwt,Azure Active Directory,我已经在Azure广告中从清单中创建了一个应用程序,清单中有几个appRoles,我可以为用户分配这些角色。用户完成单点登录后,返回到我的应用程序,然后我从他们的登录请求一个JSON Web令牌。问题是,我从Azure获得的令牌中没有列出分配的角色,这表明应该有 是否有我缺少的配置选项,或者是否有其他方法通过Azure Graph API查找他们分配的角色 更新: 在请求授权URL时,将资源指定为应用程序ID URI之后,我设法获得了一些进一步的信息 我现在返回以下错误(在返回URL中): “

我已经在Azure广告中从清单中创建了一个应用程序,清单中有几个
appRoles
,我可以为用户分配这些角色。用户完成单点登录后,返回到我的应用程序,然后我从他们的登录请求一个JSON Web令牌。问题是,我从Azure获得的令牌中没有列出分配的角色,这表明应该有

是否有我缺少的配置选项,或者是否有其他方法通过Azure Graph API查找他们分配的角色


更新:

在请求授权URL时,将
资源
指定为应用程序ID URI之后,我设法获得了一些进一步的信息

我现在返回以下错误(在返回URL中):

“未将登录用户“”分配给应用程序的角色”

用户分配的角色:

登录并返回应用程序后的错误消息:


@Phlip,请尝试使用PowerShell设置应用程序权限,好吗

#1.down load Azure AD powershell and login in using your user in AD
$msolcred=get-credential
connect-msolservice -credential $msolcred

#2. get principal Id 
$ClientIdWebApp = '5b597c35-**-**-ad05-***'
$webApp = Get-MsolServicePrincipal –AppPrincipalId $ClientIdWebApp

# 3. use Add-MsolRoleMember to add it to “Company Administrator” role).
Add-MsolRoleMember -RoleName "Company Administrator" -RoleMemberType ServicePrincipal -RoleMemberObjectId $webApp.ObjectId
有关更多信息,请参阅本页: 并使用此方法将成员添加到角色中:

Add-MsolRoleMember -RoleName "Company Administrator" -RoleMemberEmailAddress "user@contoso.com"
任何更新或结果,请告诉我。

下面的C#代码可以使用
ApprovalizedTo
属性查询应用程序的指定用户。我不熟悉php,但我相信它有类似的方法。ActiveDirectoryClient类来自


可能不是人们想要听到的答案,如果他们遇到这条寻找问题解决方案的线程,但是我们从使用OAuth切换到SAML,现在我们成功地在SAML响应中获得了应用程序角色


我只能假设Azure AD上应用程序角色的OAuth实现完全被破坏,因为我们除了切换到SAML之外什么都没做。

这里有一个指南,它是否对您有帮助。谢谢Gary,但这实际上是我一直在使用的指南,据我所知,我完全遵循了它。唯一的例外是我的web应用程序是wri在PHP中tten。嗨,威尔,我已经按照这些步骤进行了操作,但我仍然没有做进一步的工作。有没有办法查找用户为使用Azure AD Powershell工具的应用程序分配了什么角色,这样我就可以确认他们真的被分配了?如果他们不是来自Powershell工具,有没有办法分配给他们?@Philippyce,正如我所知,a另一种方法是图形API。请参考此API()检查分配的信息。此外,我建议您参考此文档,了解有关应用程序用户分配和应用程序权限以及应用程序角色的说明()。文档解释了与您提供的类似的错误消息。@Philippyce,我还建议您检查用户是否在目录组中。如果尚未将用户添加到目录组中,请将其添加到组中。
Add-MsolRoleMember -RoleName "Company Administrator" -RoleMemberEmailAddress "user@contoso.com"
var Serprincipal = activeDirectoryClient.ServicePrincipals.Where(IServicePrincipal => IServicePrincipal.AppId.Equals("app client id")).ExecuteAsync().Result.CurrentPage.ToList();
            var sp = Serprincipal.FirstOrDefault();
            var userAssignments = (sp as IServicePrincipalFetcher).AppRoleAssignedTo.ExecuteAsync().Result.CurrentPage.ToList();
           foreach (IAppRoleAssignment assignedUser in userAssignments)
            {
               Console.WriteLine("UserId: {0}  Name: {1} ObjectType: {2} ", assignedUser.PrincipalId, assignedUser.PrincipalDisplayName, assignedUser.ObjectType);
           }