Microsoft身份平台4-WebApp-您的API / 4-1-MyOrg /

问题描述

使用Microsoft Sample Code时 “如何使用Microsoft身份平台(以前是针对开发人员的Azure Active Directory)保护由ASP.NET Core构建的Web API的安全”

在执行TodoList服务的注册步骤时(我建议1个作用域,但我添加了1个附加作用域),我添加了2个作用域。 在TodoListService中,有一个任务PrepareAuthenticatedClient() Link to code

private async Task PrepareAuthenticatedClient()
        {
            var accesstoken = await _tokenAcquisition.GetAccesstokenForUserAsync(new[] { _TodoListScope });
            Debug.WriteLine($"access token-{accesstoken}");
            _httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer",accesstoken);
            _httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
        }

我只在遵循MS指令但运行代码后才将认范围添加到要求在应用程序的配置部分中注册的appsettings.json配置中,但是当代码运行时,我获得访问代码并使用{{ 3}}

我似乎有“ scp”:“ access_as_editor access_as_user”,

我以为我只会看到access_as_user,因为那是_TodoListScope中传递的范围。我应该只看到1个还是全部看到?

解决方法

如果您在申请注册期间或通过其他某种方式同意了两个范围,那么您所看到的就是预期的,即您应该同时看到这两个范围。这样做的原因是permissions and consent在Azure AD中的工作方式。当您请求资源(例如Web API)的访问令牌时,无论您是否同意,都将返回您先前同意对该资源的所有范围。当时是否实际要求该范围。