访问令牌中缺少范围 - 代码流

Missing scope in access token - code flow

我正在尝试执行 Oauth2 code flow 以获取访问令牌,但无法获取内置电子邮件 scope

以下是我的设置。

  1. 我已经在 Azure Active Directory 中注册了一个应用程序。假设应用程序 ID 是 - APP1
  2. 我正在使用 V2 端点从“授权”端点访问 'code'。

下面是一段代码

[HttpPost]  
    public IActionResult Index(MyModel myModel)
    {

        HttpClient client = new HttpClient();
        var authEndpoint = "https://login.microsoftonline.com/{my-tenant-id}/oauth2/v2.0/authorize?client_id=APP1&response_type=code&scope=openid+email";

        return Redirect(authEndpoint);

    }

    public IActionResult Callback(string code, string error)
    {
        Console.WriteLine("callback");
        AuthenticationContext context = new AuthenticationContext("https://login.microsoftonline.com/9e8754b6-f9cd-4aed-974d-a0ec0f3ed703");
        ClientCredential cc = new ClientCredential("APP1", "xxxxxxx/_");
        var resource = "c4887ff4-f750-4f1b-9781-744affe6fee2";
        var r = context.AcquireTokenAsync(resource,cc).Result;
        var tokenEndpoint = "https://login.microsoftonline.com/9e8754b6-f9cd-4aed-974d-a0ec0f3ed703/oauth2/v2.0/token";
        return Ok("");

    }

请注意,我请求两个范围 openidemail

我正在通过适当的 code 获得回调,我正在进一步交易以使用 ADAL 库检索访问令牌。

我正在取回访问令牌,但访问令牌中缺少范围。请看下面的截图。

您对机密客户端应用程序对象使用了错误的方法。您没有使用代码值。 因此,您正在通过客户端凭据流获取令牌,该令牌从不具有范围,因为它是仅限应用程序的流。 使用接受授权码的 method/overload :)