PHP Azure OAuth JWT 应用角色
PHP Azure OAuth JWT App Roles
我已经在 Azure AD 中从清单中创建了一个应用程序,里面有几个 appRoles
,我可以将用户分配给这些角色。用户完成单点登录后,return 发送到我的应用程序,然后我从他们的登录请求一个 JSON Web 令牌。问题是,我从 Azure 取回的令牌中没有列出分配的角色,因为它表明应该是 here.
是否有我遗漏的配置选项,或者是否有其他方法可以通过 Azure Graph 找出分配给他们的角色API?
更新:
在请求授权时将 resource
指定为应用程序 ID URI 之后 URL 我已经取得了一些进展。
我现在收到以下错误(在 return URL 中):
"The signed in user '<user email>' is not assigned to a role for the application '<app client id>'."
用户肯定已在应用的 Azure AD 控制面板中分配了角色,并且错误消息中的应用客户端 ID 与应用的客户端 ID 完全匹配。
应用程序配置:
用户分配了一个角色:
登录并return进入应用程序后出现错误消息:
@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
更多信息,请参考此页面:
https://msdn.microsoft.com/en-us/library/azure/dn919663.aspx
并使用此方法将成员添加到角色中:
Add-MsolRoleMember -RoleName "Company Administrator" -RoleMemberEmailAddress "user@contoso.com"
任何更新或结果,请告诉我。
下面的 C# 代码可以使用 AppRoleAssignedTo
属性查询您的应用程序已分配的用户。我不是php的家人,但我相信它有类似的方法。 ActiveDirectoryClient class 来自 Active Directory Graph Client Library。
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);
}
如果人们正在寻找问题的解决方案,他们可能不会想听到这个答案,但我们从使用 OAuth 切换到 SAML,现在我们成功地在 SAML 响应中获得了应用程序角色。
我只能假设 Azure AD 上应用角色的 OAuth 实现完全被破坏了,因为除了切换到 SAML 之外我们没有做任何更改。
我已经在 Azure AD 中从清单中创建了一个应用程序,里面有几个 appRoles
,我可以将用户分配给这些角色。用户完成单点登录后,return 发送到我的应用程序,然后我从他们的登录请求一个 JSON Web 令牌。问题是,我从 Azure 取回的令牌中没有列出分配的角色,因为它表明应该是 here.
是否有我遗漏的配置选项,或者是否有其他方法可以通过 Azure Graph 找出分配给他们的角色API?
更新:
在请求授权时将 resource
指定为应用程序 ID URI 之后 URL 我已经取得了一些进展。
我现在收到以下错误(在 return URL 中):
"The signed in user '<user email>' is not assigned to a role for the application '<app client id>'."
用户肯定已在应用的 Azure AD 控制面板中分配了角色,并且错误消息中的应用客户端 ID 与应用的客户端 ID 完全匹配。
应用程序配置:
用户分配了一个角色:
登录并return进入应用程序后出现错误消息:
@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
更多信息,请参考此页面: https://msdn.microsoft.com/en-us/library/azure/dn919663.aspx 并使用此方法将成员添加到角色中:
Add-MsolRoleMember -RoleName "Company Administrator" -RoleMemberEmailAddress "user@contoso.com"
任何更新或结果,请告诉我。
下面的 C# 代码可以使用 AppRoleAssignedTo
属性查询您的应用程序已分配的用户。我不是php的家人,但我相信它有类似的方法。 ActiveDirectoryClient class 来自 Active Directory Graph Client Library。
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);
}
如果人们正在寻找问题的解决方案,他们可能不会想听到这个答案,但我们从使用 OAuth 切换到 SAML,现在我们成功地在 SAML 响应中获得了应用程序角色。
我只能假设 Azure AD 上应用角色的 OAuth 实现完全被破坏了,因为除了切换到 SAML 之外我们没有做任何更改。