.net 如何获取Azure本机客户端应用程序角色?
我正在将WinForms应用程序验证为具有Azure托管服务API访问权限的Azure本机客户端。我已经在本机客户端和服务API上定义了应用程序角色,并将本机客户端的权限分配给服务API。这一切都很好,我确实在服务API中为我的用户定义了应用程序角色。例如,我为HTTPGET和HTTPPOST操作定义了读写角色,并保护了API。但是,我没有得到我在本机客户端中定义的角色。我已经定义了本机客户端角色,如“用户”和“管理员”。这些角色将用于隐藏/显示UI的部分。当本机客户端进行身份验证时,它将指定服务API的本机客户端ID和资源ID。我知道我得到的令牌是专门用于服务的,这可能就是为什么我只接收该服务的角色,而不接收我的客户端角色。那么,如何在不使用graph API的情况下获得本机客户端角色呢?用于身份验证的方法需要资源ID。本机客户端未定义资源ID(应用程序ID URI)。正如我在令牌请求中指定的那样,我希望同时接收客户端和资源应用程序角色.net 如何获取Azure本机客户端应用程序角色?,.net,azure,authentication,adal,role,.net,Azure,Authentication,Adal,Role,我正在将WinForms应用程序验证为具有Azure托管服务API访问权限的Azure本机客户端。我已经在本机客户端和服务API上定义了应用程序角色,并将本机客户端的权限分配给服务API。这一切都很好,我确实在服务API中为我的用户定义了应用程序角色。例如,我为HTTPGET和HTTPPOST操作定义了读写角色,并保护了API。但是,我没有得到我在本机客户端中定义的角色。我已经定义了本机客户端角色,如“用户”和“管理员”。这些角色将用于隐藏/显示UI的部分。当本机客户端进行身份验证时,它将指定服
UserCredential uc = new UserCredential();
try
{
// This method requires a resourceId.
// How do I request a token for just the client that returns client app roles, or client and servcie roles in one request?
// Azure Native Client does not define a resourceId, a.k.a. APP ID URI
result = authContext.AcquireTokenAsync(odataServiceResourceId, clientId, uc).Result;
var jwt = new JwtSecurityTokenHandler().ReadJwtToken(result.AccessToken);
String[] roles = jwt.Claims.Where(c => c.Type == "roles").Select(c => c.Value).ToArray(); // missing client roles???
txtResults.Text = "Application roles assigned to you: ";
foreach(var role in roles)
{
txtResults.Text += role + ",";
}
// roles is missing the client roles, but has the service roles???
btnSignIn.Text = "Sign Out";
lblUser.Text = String.Format(@"{0} {1}", result.UserInfo.GivenName, result.UserInfo.FamilyName);
lblMessage.Text = "Sign in successfull";
}
catch (Exception ee)
{
lblMessage.Text = ee.Message;
return;
}
此身份验证只需要访问资源的权限,因此资源ID是资源的应用程序ID url。所以我认为您的代码将无法获得本机应用程序的角色。如果您想这样做,我认为您需要graph API。此身份验证只需要访问资源的权限,因此资源ID是资源的应用程序ID url。所以我认为您的代码将无法获得本机应用程序的角色。如果您想这样做,我想您需要graph API。这也是我得出的结论。我必须授予graph API权限,然后进行调用以获取客户端的应用程序角色。这也是我得出的结论。我必须授予graph API权限,然后调用以获取客户端的应用程序角色。