Azure ad b2c 身份验证失败:com.microsoft.identity.client.exception.MsalArgumentException:作用域不能为null或空

Azure ad b2c 身份验证失败:com.microsoft.identity.client.exception.MsalArgumentException:作用域不能为null或空,azure-ad-b2c,Azure Ad B2c,我不明白为什么需要示波器。获得令牌似乎需要作用域。我得到这个错误: Authentication failed: com.microsoft.identity.client.exception.MsalArgumentException: scopes cannot be null or empty 打电话的时候 IMultipleAccountPublicClientApplication.acquireToken 来自本地android应用程序 在我的Azure B2C应用程序设置中,我

我不明白为什么需要示波器。获得令牌似乎需要作用域。我得到这个错误:

Authentication failed: com.microsoft.identity.client.exception.MsalArgumentException: scopes cannot be null or empty
打电话的时候

IMultipleAccountPublicClientApplication.acquireToken
来自本地android应用程序

在我的Azure B2C应用程序设置中,我将“Web App/Web API-包括Web App/Web API”设置为“否”。信息显示:“如果这是一个web应用程序,请选择“是”,并将“本机客户端-包括本机客户端”设置为“是”。相关信息显示:“如果这是本机客户端,请选择“是”。例如,移动或桌面应用程序。”

我转到Azure B2C中我的应用程序的已发布范围,并看到:“未包括Web应用程序/Web API”

由于我无法包含已发布的作用域,因为我只是试图在本地Android移动应用程序上实现这一点,并且我无法在没有作用域的情况下调用“acquireToken”,因此我不确定如何继续


任何关于作用域的背景知识都会很有帮助。我不确定什么是“范围”。据我所知,它们是OAuth 2.0中包含的细粒度权限。我想实际实现它们取决于应用程序、webapi等。

要更好地理解,请查看

对于B2C,如果您想获得主要用于身份验证的证书,可以使用openid范围。如果您想获得访问令牌,那么您必须(这适用于web或本机应用程序)进行B2C应用程序注册,然后在令牌请求中使用它们

关于许可问题:

  • 以下是在旧版应用程序注册体验中创建的本机应用程序:
  • 使用预览应用程序注册
  • 添加自定义范围
  • 将自定义范围添加为要包含在令牌中的权限

  • 要更好地理解,请查看

    对于B2C,如果您想获得主要用于身份验证的证书,可以使用openid范围。如果您想获得访问令牌,那么您必须(这适用于web或本机应用程序)进行B2C应用程序注册,然后在令牌请求中使用它们

    关于许可问题:

  • 以下是在旧版应用程序注册体验中创建的本机应用程序:
  • 使用预览应用程序注册
  • 添加自定义范围
  • 将自定义范围添加为要包含在令牌中的权限

  • 您需要什么样的代币?作用域标识您是否需要id令牌或访问令牌,如果是访问令牌,则标识权限。我需要在应用程序中执行两项操作,即身份验证,然后访问web API。我正在做第一个,因为要让它工作起来很有挑战性。我刚刚做了一个快速测试,构建了其中一个API,但它们还远远没有准备好。在尝试从本机客户端开始时,我遇到了Scopes问题。您需要获得什么样的令牌?作用域标识您是否需要id令牌或访问令牌,如果是访问令牌,则标识权限。我需要在应用程序中执行两项操作,即身份验证,然后访问web API。我正在做第一个,因为要让它工作起来很有挑战性。我刚刚做了一个快速测试,构建了其中一个API,但它们还远远没有准备好。在尝试从本机客户端开始时,我遇到了范围问题。这是一篇好文章。我以前读过,但很难消化。我想了解Azure Portal for AAD B2C中“本机客户端”的作用域需要是什么,因为您无法在启用此设置和启用“Web App/Web API”的情况下创建作用域。它可能隐含在以下内容中:“如果/authorize请求中的response_type参数包括令牌,scope参数必须至少包括一个资源作用域,而不是将被授予的openid和脱机_访问。否则,/authorize请求将失败。“这似乎意味着即使未配置也存在隐式作用域。@lcj没有隐式作用域,只是告诉我们需要添加(资源)要检索的访问令牌的作用域。id和刷新令牌需要openid和offline_访问。现在确定问题所在。如果使用旧版应用注册,则会发生这种情况。请尝试新的(预览)一个。我正在用一些图片更新我的答案。谢谢!!!成功了。身份验证成功了。这里显然有很多我需要了解的地方,但这是一个很大的帮助。快速提问,我知道你将你的范围命名为SampleScope,但你能将其命名为SignIn或类似的名称吗?大概你需要为你的每个权限指定范围可能会在应用程序中授予权限,对吗?如果您只授予对应用程序的访问权限,并且实际上只有一个级别的权限,可能类似于登录或身份验证,对吗?如果您有多个权限,您将创建这些权限作为作用域并为其授予权限,对吗?考虑到这些权限与B2C相关,您可能会对不同的角色有不同的作用域/权限,对吗?@lcj是的,您可以命名任何您想要的内容,创建所有您需要的内容,并按逻辑(您的应用程序)角色对其进行分组。这是一篇好文章。我以前读过这篇文章,但很难理解。我想看看该应用程序需要什么作用域。”Azure Portal for AAD B2C中的“本机客户端”,因为您无法使用此设置和“Web App/Web API”创建作用域。这可能是隐含的:“如果/authorize请求中的response\u type参数包含令牌,则scope参数必须至少包含一个资源作用域,而不是将被授予的openid和脱机\u访问。否则,/authorize请求失败。”这似乎意味着即使没有配置,也有一个隐式作用域。@lcj没有隐式作用域,只是告诉我们需要为要检索的访问令牌添加一个(资源)作用域。id和刷新令牌需要openid和脱机_访问。好了现在很清楚你的问题是什么