繁体   English   中英

来自 Powershell 客户端的 Azure AD 组声明

[英]Azure AD Group Claims from a powershell client

我正在尝试使用 Azure AD 组声明在对 REST 端点进行身份验证之前检查用户是否是组的成员。 我首先克隆了这个项目: https : //github.com/Azure-Samples/active-directory-dotnet-webapp-groupclaims 但是,有两个小的差异。

1) 我公开了一个 Web API REST 端点,它使用用户令牌调用 GetGroups

var identity = (ClaimsIdentity)HttpContext.Current.User.Identity;
ClaimHelper.GetGroups(identity)

2) 我正在使用 powershell 客户端而不是浏览器进行身份验证。 以下是客户端获取令牌的方式:

 #This function gets an azureADToken for our app
 function Get-AzureADToken2 {

    Add-Type -Path ".\Microsoft.IdentityModel.Clients.ActiveDirectory.dll"

    $authority = "https://login.microsoftonline.com/microsoft.onmicrosoft.com"
    $authContext = New-Object -TypeName Microsoft.IdentityModel.Clients.ActiveDirectory.AuthenticationContext -ArgumentList ($authority);

    $appIdURI = "https://mysite.azurewebsites.net"
    $clientId = "6528ed9d9-1708-4b1b-851b-f773fa32f477"
    $redirectURI = "https://mysite.azurewebsites.net/api"

    #$platparam = new-object -TypeName Microsoft.IdentityModel.Clients.ActiveDirectory.PlatformParameters -ArgumentList ( [Microsoft.IdentityModel.Clients.ActiveDirectory.PromptBehavior]::Auto)
    $platparam = new-object -TypeName Microsoft.IdentityModel.Clients.ActiveDirectory.PlatformParameters -ArgumentList ( [Microsoft.IdentityModel.Clients.ActiveDirectory.PromptBehavior]::Always)



    $authContext.AcquireTokenAsync($appIdURI, $clientId, $redirectURI,$platparam);
}

当客户端是浏览器时,一切都按预期工作,并且对 getgroups 的调用列出了适当的组。 但是,当使用 powershell 客户端调用时,它会在此处抛出异常(假设令牌未从较早的浏览器会话中缓存,在这种情况下没有异常):

AuthenticationResult result = await authContext.AcquireTokenSilentAsync(ConfigHelper.GraphResourceId, credential,
     new UserIdentifier(claimsIdentity.FindFirst(Globals.ObjectIdClaimType).Value, UserIdentifierType.UniqueId));

{"Failed to acquire token silently as no token was found in the cache. Call method AcquireToken"}

在调试和手动检查时,从浏览器和 PS 客户端收到的声明似乎几乎相同。 我打开了 ADAL 诊断,但没有任何用处。 有小费吗?

此问题的根本原因是您的 Web API 的缓存中没有访问令牌。 代码示例使用 OWIN Open ID 连接组件与 Azure AD 交互,它将在用户登录后获取访问令牌(检查代码Startup.Auth.cs#L39 )。 之后,它可以使用AcquireTokenSilentAsync方法从缓存中静默获取令牌。

在您的方案中,您可以使用代表流来获取 Azure AD Graph 的访问令牌,使用 Web API 的访问令牌。 有关此流程的更多详细信息,您可以参考以下链接:

使用 Azure AD 从 Web API 调用下游 Web API

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM