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

我想通过其客户端凭证直接访问一个 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 权限?


我需要做什么。


白衣染霜花
浏览 121回答 4
4回答

天涯尽头无女友

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

幕布斯6054654

此错误消息表明您需要将“应用程序角色”添加到您的应用程序注册中。您可以通过首先在{API GUID}上添加新的应用程序角色来执行此操作然后为应用程序{API GUID}分配此角色(不要忘记给予管理员同意)本质上,这里发生的事情是您的应用程序注册{API GUID}在{API GUID}上获得了为受众{API GUID}创建访问令牌的角色,因此:它本身。

慕尼黑的夜晚无繁华

啊,所以您想要 API 本身的访问令牌?不确定这是否可能..如果这是在另一个应用程序中,则应将其注册为 Azure AD 中的另一个应用程序。然后,它可以要求 API 上的应用程序权限并通过客户端凭据调用它。如果这是在同一个应用程序中,那么它会为自己获取令牌,这听起来很奇怪。

月关宝盒

当您使用“authContext.AcquireTokenAsync(apiID, clientCredential);”时 要获取访问令牌,您需要使用广告应用程序的identifierUri作为资源。例如: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);
打开App,查看更多内容
随时随地看视频慕课网APP