获取AADSTS50058:已发送无提示登录请求,但未针对用户令牌生成问题登录



我正在开发一个将由客户端应用程序使用的Web API。我使用的 AD 身份验证机制是"使用应用程序的权限调用 Web API"。

客户端应用使用应用程序权限调用 Web api,在 Web API 中,我尝试使用 Azure Rest API 来管理 Azure 资源。Azure Rest API 通过使用用户断言生成令牌来代表用户使用。

我们遇到了

"AADSTS50058:已发送静默登录请求,但没有用户签名 代表用户令牌生成的问题">

尝试生成访问令牌时。

当客户端应用到 Web API 遵循Application Identity with OAuth 2.0 Client Credentials Grant方法并且 Web API 尝试代表客户端 AD 应用使用 Azure REST/管理 API 时,代表用户方案是否有效?

  ClientCredential clientCredential = new ClientCredential(ConfigurationManager.AppSettings["ida:ClientId"], ConfigurationManager.AppSettings["ida:SecretKey"]);
            AuthenticationContext authContext = new AuthenticationContext(authority);
            var bootstrapContext = ClaimsPrincipal.Current.Identities.First().BootstrapContext;
            string userName = ClaimsPrincipal.Current.FindFirst(ClaimTypes.Upn) != null ? ClaimsPrincipal.Current.FindFirst(ClaimTypes.Upn).Value : ClaimsPrincipal.Current.FindFirst(ClaimTypes.Email).Value;
            UserAssertion userAssertion = new UserAssertion(bootstrapContext.ToString(), "urn:ietf:params:oauth:grant-type:jwt-bearer", userName);
            AuthenticationResult result = await authContext.AcquireTokenAsync(ConfigurationManager.AppSettings["AzureResourceManagerIdentifier"], clientCredential, userAssertion);
            // Get subscriptions to which the user has some kind of access
            //string requestUrl =https://management.azure.com/subscriptions?api-version=2014-04-01"
            string requestUrl = string.Format("{0}/subscriptions?api-version={1}", ConfigurationManager.AppSettings["AzureResourceManagerUrl"], AzureResourceManagerAPIVersion);
            // Make the GET request
            HttpClient client = new HttpClient();
            HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, requestUrl);
            request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", result.AccessToken);
            HttpResponseMessage response = client.SendAsync(request).Result;
            if (response.IsSuccessStatusCode)

代表获取一个令牌,以调用此应用的用户身份调用另一个 API。

如果您的 API 是由应用使用客户端凭据调用的,则没有用户。

因此,在这种情况下,您不能使用"代表"。

最新更新