版本x OIDC在授权请求中缺少作用域

hfwmuf9z  于 2022-10-08  发布在  其他
关注(0)|答案(1)|浏览(168)

我有以下代码来创建AzureAD身份验证提供程序。

val options = OAuth2Options()
            .setClientId(clientId)
            .setClientSecret(clientSecret)
            .setTenant(guid)
            .setSite("https://login.microsoftonline.com/{tenant}/v2.0")
val authProvider = AzureADAuth.discover(vertx, options).await()

现在,如果我尝试使用浏览器登录,在Microsoft登录页面上会出现以下错误:

AADSTS900144: The request body must contain the following parameter: 'scope'.

查看URL,确实没有作用域参数:

https://login.microsoftonline.com/xx-xx-xx-xx-xx/oauth2/v2.0/authorize?state=duF2O-eO&redirect_uri=http%3A%2F%2Flocalhost%3A9339%2Fazure-callback&response_type=code&client_id=xx-xx-xx-xx-xx

当我用Cogito而不是Azure做同样的事情时,它工作起来没有问题,即使在请求中也没有范围。

我遗漏了什么?这是Vert.x Side还是Azure?

zfciruhq

zfciruhq1#

正在从Azure Active Directory服务中冒出错误消息:

AADSTS900144: The request body must contain the following parameter: 'scope'.

Azure始终要求至少提供1个作用域。根据您使用vert.x的方式,您可以使用两种方法:

如果直接使用auth API,则需要在凭据请求中指定所需的作用域:

oauth2
  .authenticate(
    new Oauth2Credentials()
      // flow specific options +
      .addScope("a")
      .addScope("b")

如果您从vertx-web应用程序使用它,则可以在OAuth2处理程序上指定所需的作用域:

OAuth2AuthHandler oauth2 = OAuth2AuthHandler
  .create(vertx, authProvider)
  // these are the scopes
  .withScope("a")
  .withScope("b");

作用域是特定于提供商的,因此您需要参考Azure文档以了解您应该使用哪些作用域:

https://learn.microsoft.com/en-us/azure/active-directory/develop/v2-overview

相关问题