访问令牌中缺少范围 - 代码流
Missing scope in access token - code flow
我正在尝试执行 Oauth2 code flow
以获取访问令牌,但无法获取内置电子邮件 scope
。
以下是我的设置。
- 我已经在 Azure Active Directory 中注册了一个应用程序。假设应用程序 ID 是 -
APP1
- 我正在使用 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("");
}
请注意,我请求两个范围 openid
和 email
我正在通过适当的 code
获得回调,我正在进一步交易以使用 ADAL 库检索访问令牌。
我正在取回访问令牌,但访问令牌中缺少范围。请看下面的截图。
您对机密客户端应用程序对象使用了错误的方法。您没有使用代码值。
因此,您正在通过客户端凭据流获取令牌,该令牌从不具有范围,因为它是仅限应用程序的流。
使用接受授权码的 method/overload :)
我正在尝试执行 Oauth2 code flow
以获取访问令牌,但无法获取内置电子邮件 scope
。
以下是我的设置。
- 我已经在 Azure Active Directory 中注册了一个应用程序。假设应用程序 ID 是 -
APP1
- 我正在使用 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("");
}
请注意,我请求两个范围 openid
和 email
我正在通过适当的 code
获得回调,我正在进一步交易以使用 ADAL 库检索访问令牌。
我正在取回访问令牌,但访问令牌中缺少范围。请看下面的截图。
您对机密客户端应用程序对象使用了错误的方法。您没有使用代码值。 因此,您正在通过客户端凭据流获取令牌,该令牌从不具有范围,因为它是仅限应用程序的流。 使用接受授权码的 method/overload :)