为了账号安全,请及时绑定邮箱和手机立即绑定

AADSTS501051:应用程序“{API GUID}”(DEV-API) 未分配给应用程序

AADSTS501051:应用程序“{API GUID}”(DEV-API) 未分配给应用程序

C#
白衣染霜花 2023-09-09 17:24:50
我想通过其客户端凭证直接访问一个 API,而不是通过任何 Web 应用程序private async Task<string> GetAutheticationToken(string APITypeSelected, string APIKeySelected=null)    {        string aadInstance = ConfigurationManager.AppSettings["ida:AADInstance"];        string tenant = ConfigurationManager.AppSettings["ida:AADTenant"];        string appKey = ConfigurationManager.AppSettings[APIKeySelected];        string apiID = ConfigurationManager.AppSettings[APITypeSelected];        //appKey = HttpUtility.UrlEncode(appKey);        string authority = String.Format(CultureInfo.InvariantCulture, aadInstance, tenant);        using (HttpClient client = new HttpClient())        {            Microsoft.IdentityModel.Clients.ActiveDirectory.AuthenticationContext authContext = null;            ClientCredential clientCredential = null;            authContext = new Microsoft.IdentityModel.Clients.ActiveDirectory.AuthenticationContext(authority);            //encodeURIComponent(client_secret);            clientCredential = new ClientCredential(apiID, appKey);            AuthenticationResult authResult = null;            authResult = await authContext.AcquireTokenAsync(apiID, clientCredential);            return authResult.AccessToken;        }    }执行时我在这一行收到以下错误(AADSTS501051)authResult = await authContext.AcquireTokenAsync(apiID, clientCredential);AADSTS501051:应用程序“{API GUID}”(DEV-API) 未分配给应用程序“{API GUID}”(DEV-API) 的角色。我是否必须向其自身授予 API 权限?我需要做什么。
查看完整描述

4 回答

?
天涯尽头无女友

TA贡献1831条经验 获得超9个赞

如果需要应用程序分配,首先您需要为应用程序创建用户角色。如果没有也没有问题。如果需要应用程序分配,请返回 api 权限并在我的 api 中为创建的角色授予权限.


查看完整回答
反对 回复 2023-09-09
?
幕布斯6054654

TA贡献1876条经验 获得超7个赞

此错误消息表明您需要将“应用程序角色”添加到您的应用程序注册中。您可以通过首先在{API GUID}上添加新的应用程序角色来执行此操作

https://img1.sycdn.imooc.com//64fc3a1b0001770306450357.jpg

然后为应用程序{API GUID}分配此角色(不要忘记给予管理员同意)

https://img1.sycdn.imooc.com//64fc3a2a0001198925550815.jpg

本质上,这里发生的事情是您的应用程序注册{API GUID}在{API GUID}上获得了为受众{API GUID}创建访问令牌的角色,因此:它本身。



查看完整回答
反对 回复 2023-09-09
?
慕尼黑的夜晚无繁华

TA贡献1864条经验 获得超6个赞

啊,所以您想要 API 本身的访问令牌?不确定这是否可能..

如果这是在另一个应用程序中,则应将其注册为 Azure AD 中的另一个应用程序。然后,它可以要求 API 上的应用程序权限并通过客户端凭据调用它。

如果这是在同一个应用程序中,那么它会为自己获取令牌,这听起来很奇怪。


查看完整回答
反对 回复 2023-09-09
?
月关宝盒

TA贡献1772条经验 获得超5个赞

当您使用“authContext.AcquireTokenAsync(apiID, clientCredential);”时 要获取访问令牌,您需要使用广告应用程序的identifierUri作为资源。

https://img4.sycdn.imooc.com/64fc3a430001176109620376.jpg

例如:


string tenantId = "your tenant id or name, for example: hanxia.onmicrosoft.com";

            string clientId = "your client id"; 

            string resource = "the identifierUri of your ad application ";

            string clientSecret = "";


        ClientCredentia clientCredentia = new ClientCredentia(clientId,clientSecret);


                var context = new AuthenticationContext("https://login.microsoftonline.com/" + tenantId);

                AuthenticationResult result = context.AcquireTokenAsync(resource, clientCredentia);



查看完整回答
反对 回复 2023-09-09
  • 4 回答
  • 0 关注
  • 88 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信