来宾用户无法从 Microsoft Graph API 获取数据? Returns 未找到项目响应
Guest users unable to fetch data from Microsoft Graph API? Returns a item not found response
我想验证我是否正确配置了所有内容。
我有一个用户在租户 A 注册为 Azure AD 中的来宾用户,该用户是在 租户 B 上创建的。此图表 api 端点当前正在从 租户 A 获取信息。我作为全局管理员和我试图从中获取的帐户集中在租户 A 和 B 中,但我仍然无法为该用户获取任何数据。
我只尝试过这个端点,它可以与租户 A 中的一个成员一起正常工作,但不能作为访客用户使用。
会员回复:
客人回复:
当然,此请求唯一不同的是访问令牌。
我觉得如果它是 401,我会有点明白,但因为它是 404,我不会获取任何特定的东西,只是用户可以访问的任何站点,就像一个空的响应会很好,但 404 并没有告诉我太多。知道我在这里遗漏了什么或没有检查过什么吗?
您收到 404 的原因是,当您在授权中传递来宾用户的访问令牌时 header,它必须连接到来宾用户的家庭租户。由于来宾用户的家庭租户中不存在该资源,因此抛出 404。
要确认这一点,请使用来宾用户使用 https://developer.microsoft.com/en-us/graph/graph-explorer link、sign-in 登录 Graph Explorer 并执行 GET 调用。
如果失败并返回 404,请使用下面的 link 访问 Graph Explorer。注意 URL 中的参数租户。通过使用此参数,您可以指定要连接到哪个租户,并避免默认连接到主租户。
https://developer.microsoft.com/en-us/graph/graph-explorer?tenant=tenant_name.onmicrosoft.com
一旦确认这是问题所在,您需要确保令牌是由拥有资源的租户而非用户的家庭租户颁发的。
例如,如果您使用以下调用,TenantA 将向来宾用户颁发令牌。
https://login.microsoftonline.com/TENANT_A.onmicrosoft.com/oauth2/v2.0/authorize?client_id=APP_ID_FROM_TENANT_A&response_type=token&redirect_uri=https://jwt.ms&state=1234&response_mode=fragment&scope=https://graph.microsoft.com/.default
注意:要使用上述调用获取令牌,请确保配置了以下设置:
- 在应用程序的身份验证 blade 下(您在上述身份验证调用中指定了其客户端 ID),访问令牌(用于隐式流) 的复选框是已选中。
- 在应用程序的 API 权限 blade 下,添加 Directory.AccessAsUser.All 和 sites.read.all 图权限并得到管理员同意。
- 在应用程序的身份验证 blade 下,确保将重定向 URI 设置为 https://jwt.ms
使用此方法获取令牌后,将其用于 GET 调用的授权 header,您应该不会再收到 404。
我想验证我是否正确配置了所有内容。
我有一个用户在租户 A 注册为 Azure AD 中的来宾用户,该用户是在 租户 B 上创建的。此图表 api 端点当前正在从 租户 A 获取信息。我作为全局管理员和我试图从中获取的帐户集中在租户 A 和 B 中,但我仍然无法为该用户获取任何数据。
我只尝试过这个端点,它可以与租户 A 中的一个成员一起正常工作,但不能作为访客用户使用。
会员回复:
客人回复:
当然,此请求唯一不同的是访问令牌。 我觉得如果它是 401,我会有点明白,但因为它是 404,我不会获取任何特定的东西,只是用户可以访问的任何站点,就像一个空的响应会很好,但 404 并没有告诉我太多。知道我在这里遗漏了什么或没有检查过什么吗?
您收到 404 的原因是,当您在授权中传递来宾用户的访问令牌时 header,它必须连接到来宾用户的家庭租户。由于来宾用户的家庭租户中不存在该资源,因此抛出 404。
要确认这一点,请使用来宾用户使用 https://developer.microsoft.com/en-us/graph/graph-explorer link、sign-in 登录 Graph Explorer 并执行 GET 调用。
如果失败并返回 404,请使用下面的 link 访问 Graph Explorer。注意 URL 中的参数租户。通过使用此参数,您可以指定要连接到哪个租户,并避免默认连接到主租户。
https://developer.microsoft.com/en-us/graph/graph-explorer?tenant=tenant_name.onmicrosoft.com
一旦确认这是问题所在,您需要确保令牌是由拥有资源的租户而非用户的家庭租户颁发的。
例如,如果您使用以下调用,TenantA 将向来宾用户颁发令牌。 https://login.microsoftonline.com/TENANT_A.onmicrosoft.com/oauth2/v2.0/authorize?client_id=APP_ID_FROM_TENANT_A&response_type=token&redirect_uri=https://jwt.ms&state=1234&response_mode=fragment&scope=https://graph.microsoft.com/.default
注意:要使用上述调用获取令牌,请确保配置了以下设置:
- 在应用程序的身份验证 blade 下(您在上述身份验证调用中指定了其客户端 ID),访问令牌(用于隐式流) 的复选框是已选中。
- 在应用程序的 API 权限 blade 下,添加 Directory.AccessAsUser.All 和 sites.read.all 图权限并得到管理员同意。
- 在应用程序的身份验证 blade 下,确保将重定向 URI 设置为 https://jwt.ms
使用此方法获取令牌后,将其用于 GET 调用的授权 header,您应该不会再收到 404。