gpt4 book ai didi

.net - 如何获取Azure native 客户端应用程序角色?

转载 作者:行者123 更新时间:2023-12-03 04:29:48 25 4
gpt4 key购买 nike

我正在将 WinForms 应用程序验证为可以访问 Azure 托管服务 API 的 Azure native 客户端。我已在 native 客户端和服务 API 上定义了应用程序角色,并将权限从 native 客户端分配给服务 API。这一切都很好,我确实获得了分配给服务 API 中定义的用户的应用程序角色。例如,我为 HTTP GET 和 HTTP POST 操作定义了 READ 和 WRITE 角色并保护了 API。但是,我没有获得在 native 客户端中定义的角色。我已经定义了 native 客户端角色,例如“用户”和“管理员”。这些角色将用于隐藏/显示 UI 的某些部分。当 native 客户端进行身份验证时,它指定 native 客户端 ID 和服务 API 的资源 ID。我知道我获得的 token 是专门用于该服务的,这可能就是为什么我只接收该服务的角色而不是我的客户端角色的原因。那么,如何在不使用图形 API 的情况下获得 native 客户端角色呢?身份验证方法需要资源ID。 native 客户端未定义资源ID(APP ID URI)。我希望同时接收客户端和资源应用程序角色,正如我在 token 请求中指定的那样。

 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 是资源的 App ID url。所以我认为你的代码不会获得 native 应用程序的角色。如果你想做到这一点,我认为你需要图形 API。

关于.net - 如何获取Azure native 客户端应用程序角色?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38640628/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com