1

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

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

我们遇到了

“AADSTS50058:已发送静默登录请求,但没有用户代表用户令牌生成问题登录”

尝试生成访问令牌时。

Application Identity with OAuth 2.0 Client Credentials Grant当客户端应用程序到 Web API 遵循方法并且 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)
4

1 回答 1

0

On Behalf Of 获得一个令牌,以在用户调用此应用程序时调用另一个 API。

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

因此,在这种情况下,您不能使用 On Behalf Of。

于 2018-03-15T08:47:30.397 回答