Azure AD 服务器身份验证,无权限查看目录

2023-12-23

我创建了一个 Xamarin.Forms 项目和一个 Table API 项目。两者都是通过 Azure 门户中的快速启动菜单创建的。

我已在门户中配置了 Azure AD,并且可以通过我的 XForms 应用程序成功从 AD 检索令牌。但是,当我尝试使用 MobileServiceClient 中的 LoginAsync 方法登录 Table API 时,我收到了“您无权查看目录或页面。”

我一直在浏览以下指南,但没有运气。

如何配置应用服务应用程序以使用 Azure Active Directory 登录 https://azure.microsoft.com/en-us/documentation/articles/app-service-mobile-how-to-configure-active-directory-authentication/#comments

将身份验证添加到您的 Xamarin.Forms 应用程序 https://azure.microsoft.com/en-us/documentation/articles/app-service-mobile-xamarin-forms-get-started-users/

如何:使用身份验证 https://azure.microsoft.com/en-us/documentation/articles/app-service-mobile-dotnet-backend-how-to-use-server-sdk/#how-to-work-with-authentication

我也查看了以下问题,但没有找到解决方案。

Cordova AAD 服务器流身份验证在 Android 和 iOS 上挂起 https://stackoverflow.com/questions/38576301/cordova-aad-server-flow-authentication-hangs-on-android-and-ios

我在想我可能缺少 Table API 项目的一些特定身份验证?

这是我的代码和设置:

XFORMS 中的 PCL 项目

var ar = await authContext.AcquireTokenAsync(Constants.GraphResourceUri, Constants.ClientId, userCredintials);

            JObject payload = new JObject();
            payload["access_token"] = ar.AccessToken;

            var client = new MobileServiceClient(Constants.ApplicationUrl);
            var user = await client.LoginAsync(MobileServiceAuthenticationProvider.WindowsAzureActiveDirectory, payload);

Constants.ClientID 是 Native Client 应用程序的 ClientId,而不是 Web 服务器的 ClientId。如果我改变它,我会得到 404。

表 API 项目中的控制器示例

[Authorize]
public class StatisticController : ApiController

表 API StartUp.cs 配置

public void Configuration(IAppBuilder app)
    {
        app.UseAppServiceAuthentication(new AppServiceAuthenticationOptions());
        ConfigureMobileApp(app);
    }

MOBILE SERVICE AUTH SETUP enter image description here

SINGLE SING-ON AD SETTINGS enter image description here

NATIVE CLIENT APP SETTINGS enter image description here enter image description here

EDIT

I can duplicate the error through PostMan with the following setup: enter image description here

我尝试包含一个带有 access_token 值的“X-ZUMO-AUTH”标头,但结果相同。还是没有得到许可。我还尝试排除 POST 请求中的每个标头,但没有进行任何更改。这是否意味着不允许来自我的移动应用程序或 Postmand 的 POST 请求?

如果我在浏览器中手动浏览到 mysite.azurewebsites.net/.auth/login/aad,那么我可以使用 AD 中的用户登录。因此,AD 似乎与服务正确通信,反之亦然。

FIXED IT

非常感谢马琴德森 https://stackoverflow.com/users/3769274/mattchenderson!正如他建议的那样,我应该将常量 GraphResourceUri 更改为我的服务的客户端 ID,而不是普通的图形 api。除了添加客户端的单个实例之外,我现在可以成功登录到我的服务。


允许POST请求,我一直使用Postman进行测试。

此类问题的最常见原因是受众验证问题。受众是 AAD 令牌的一个属性,它表示该令牌对于什么资源有效。鉴于上面的代码,我希望观众等于Constants.GraphResourceUri。我的猜测是,这实际上是图形 API,而不是您的应用程序,这会导致验证失败,尽管我希望它在您调用时发生LoginAsync()。我建议尝试使用 Web 应用程序客户端 ID(即“移动服务身份验证设置”屏幕截图中的客户端 ID)。

为了更轻松地进行调试,您可以将 AAD 令牌带到类似的位置http://jwt.io http://jwt.io,这将帮助您查看令牌属性。 “aud”应与在门户中注册的应用程序的客户端 ID 相同,并且您希望颁发者字段也匹配。确保令牌未过期。

当使用token访问受保护的API时,有两种提供方式:

  1. 使用作为一部分返回的令牌LoginAsync()在您请求的 X-ZUMO-AUTH 标头中。这将由 SDK 使用相同的 MobileServiceClient 自动完成表操作。
  2. 根据不记名令牌规范直接使用 AAD 令牌。也就是说,将其包含在 Authorization 标头中,值为“Bearer”,并将 token 替换为您的值。

另外,我在您的代码中看到您正在创建一个新的MobileServiceClient用于登录操作。我们通常不鼓励这样做,因为登录信息附加在MobileServiceClient目的。如果您丢失了对此的引用,您就会丢失登录信息(以及一些其他设置),并且它们将不会应用于您的表操作。建议使用在其他地方引用的单个实例 - 例如,在 Xamarin 中,共享代码中的静态变量。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Azure AD 服务器身份验证,无权限查看目录 的相关文章

  • 使用 Powershell 或 C# 获取 Azure“文件和文件夹”作业状态

    我一直在尝试找到一种方法来获取在 AzureRM 中运行的几个客户上运行的 文件和文件夹 备份作业的状态 可以在 AzureRm 门户中手动找到状态 恢复服务保管库 gt 作业 gt 备份作业 使用powershell不显示任何作业信息 G
  • apple-app-site-association 从 azure 请求返回为 application/JSON

    我有以下要求 当在 Azure 网站中请求文件的 URL 时 根文件夹中的可用文件必须返回到 application JSON 举例来说 我有一个名为 apple app site association 的文件 它是一个文本文件 在 az
  • Device.BeginInvokeOnMainThread 的用途是什么?

    我希望有人向我解释什么是 Device BeginInvokeOnMainThread 以及它的用途是什么 还有一些使用案例的示例 只是添加一个例子 假设你有一个异步方法DoAnyWorkAsync如果你这样称呼它 仅作为示例 DoAnyW
  • 如何在Xamarin.Android上播放默认按钮的声音?

    我正在使用 Xamarin forms 制作一个应用程序 如果您尝试过 您可能会知道表单的按钮不足以用作图像按钮 所以我使用图像作为按钮并添加手势识别器 运行良好 好处是我可以像使用 Image 一样使用所有 Image 的可绑定属性 如
  • Xamarin MasterDetailPage 看起来很难看

    I m trying to create a MasterDetailPage and I am not quite sure if I am doing that right but the drawer master just look
  • 使用 Azure 应用服务轻松身份验证 + Azure AD B2C 是否可以保护单个 Web API 并让多个本机应用程序使用它?

    我们有一个 Web API 旨在为多个业务合作伙伴提供服务 每个业务合作伙伴都将定制我们的本机应用程序客户端的白标版本 我们还有一个 Web API 为不同的应用程序提供通用功能 我们希望使用 AD B2C 作为身份和身份验证系统 但无法了
  • 从命令行发布 Azure 项目

    我有一个 Azure Web 角色项目 我可以使用 Visual Studio 的内置向导成功发布它 但我们希望自动化该过程 如何使用 MSbuild 或任何其他命令行工具发布 Azure WebRole 您可能还想创建一个控制台应用程序
  • 更改 Azure 资源组位置

    我在天蓝色中进行了设置 将一堆资源组合在一个资源组中 我希望我的服务位于西欧 因此我的所有资源都在那里 如果可能 我刚刚注意到 在创建资源组时 我不小心使用了 West US 所以当前的设置是 资源组 1 美国西部 应用服务 1 西欧 应用
  • iOS 更新到 15 后列表视图顶部出现奇怪的空间

    我在用着 Xamarin Froms 5 0 0 24125 Xcode 版本 13 0 13A233 Visual Studio for Mac 社区版本 8 10 9 内部版本 3 NuGet版本 5 9 0 7134 Xamarin
  • 验证 SWT 令牌 REST WCF 服务

    我目前正在开发一个 WPF 客户端 该客户端从 Windows Azure AppFabric ACS 获取 SWT 令牌 有了这个令牌 我想使用 RESTful WCF 服务 我用了本教程 http blogs msdn com b al
  • Azure git 部署 - 第二个程序集中缺少引用

    我正在尝试将 Bitbucket 部署设置到 Azure 网站 我成功链接了 Bitbucket 和 Azure 但是当我推送到 Bitbucket 时 我在 Azure 站点上收到以下错误 如果我单击 查看日志 它会显示以下编译错误 D
  • 在 Azure 上运行本机代码

    我正在尝试在 Azure 上运行 C 可执行文件 我有很多workerRoles 他们不断检查作业队列 如果队列中有作业 辅助角色将根据作业类中存储的命令行参数将 C 可执行文件的实例作为进程运行 C 可执行文件通常会创建一些日志文件 我不
  • 如何使用对 Azure 表存储的单个查询检索多种类型的实体?

    我试图了解 Azure 表存储如何创建 facebook 风格的提要 但我陷入了如何检索条目的困境 我的问题几乎和https stackoverflow com questions 6843689 retrieve multiple typ
  • Azure DocumentDB 所有者资源不存在

    我有同样的错误 icrosoft Azure Documents DocumentClientException Message Errors Owner resource does not exit 这是我的情况 当我将 web 应用程序
  • 无法在调试 Xamarin Android 和 iOS 的设备上部署

    我使用的是最新的 Visual Studio 15 6 3 无法再通过调试在设备上部署 如果我在没有调试的情况下运行它就会部署 我该如何修复它 真烦人 iOS Android System Net Mqtt Sdk MqttClientIm
  • Azure Key Vault - 添加部署槽的访问策略

    我有一个有 2 个插槽的应用程序 我已将连接字符串存储在密钥保管库中 我已在应用程序和 2 个插槽上启用 MSI 此外 在保管库的访问策略中 我添加了应用程序 生产槽 但是我无法将插槽添加到访问策略中 例如 我的应用程序的名称是 XYZ20
  • 如何防止 Xamarin Android 应用程序的设备字体大小影响?

    如果我更改设备字体 那么它也会更改我的应用程序字体 我不想根据设备字体更改我的应用程序字体 于是我就搜索了一下这个问题 结果发现方面 https developer android com guide topics resources mo
  • 具有 Windows Azure 托管网页 + IFrame + X-Frame-Options 的 Microsoft Dynamics CRM Online

    我正在尝试使用 Microsoft Dynamics CRM Online 其中 Windows Azure 托管一个自定义网页 该网页显示在 Microsoft Dynamics CRM Web 应用程序的 IFRAME 中 我读过了ht
  • 如何更改 sql azure 服务器位置

    我想将现有的 SQL Azure 位置转移到其他位置 但我认为 Azure 管理门户上目前没有功能可以执行此操作 我刚刚用谷歌搜索了一下 发现了一个链接http social msdn microsoft com Forums en US
  • 如何将屏幕截图转换为二进制?

    我正在开发一个 Xamarin Forms 项目 在该项目中我想将我的屏幕截图 PNG 转换为二进制并将其上传到服务器 现在服务器部分需要一个API 我将由已经完成它的人交给我 我只需要实现它 在我完成这个任务之后 到目前为止 我已经成功地

随机推荐

  • Pylons 在 Windows 上上传扭曲的图像

    我正在 Pylons 中创建一个网络应用程序 并且正在处理图像上传操作 目前正在我的 Windows 机器上使用 Egg paste http 运行 使用 pylons 文档快速入门中描述的基本开发配置 当我将图像发布到我的应用程序 然后将
  • 如何获取1个月的GPRS移动数据使用量?

    我对此进行了很多搜索 到处都找到了相同的代码 部分解决了目的 正如 API 文档所述 一旦设备重新启动 它就会重置计数器 有时 即使没有重新启动 计数器也会重置 下面是代码 float totalRxBytes float TrafficS
  • browser.download.manager.showWhenStarting 可能不会被覆盖

    我在 C 项目上使用 firefox 的 selenium webdriver 当我使用 NuGet 包管理器安装最新的 Webdriver 2 40 后 发生了此错误 Class 的类型初始值设定项引发异常 gt System Argum
  • 即使index_col=None,Pandas read_excel有时也会创建索引

    我正在尝试将 Excel 文件读入数据框中 并且想稍后设置索引 因此我不希望 pandas 使用第 0 列作为索引值 默认情况下 index col None 它不应该使用第 0 列作为索引 但我发现如果有no工作表单元格 A1 中的值 有
  • 属性有波动影响吗?

    在下面的代码中将read1总是等于read2 提供的财产Flag可以从其他线程更改吗 这里关心的是Flag可能会被内联 private bool Flag get set public void MultithreadedMethod va
  • 使用交叉请求获取 Forge 2 足身份验证

    我正在尝试创建一个简单的 html 页面来显示要锻造的上传模型 为了初始化伪造查看器 它需要访问令牌 为了请求访问令牌 我在交叉请求上使用 2 legged oAuth 因为我在不同的域上进行 POST 但它不断收到错误 不存在 Acces
  • 命名参数不适用于 MySql LIKE 语句

    我正在尝试使用 Spring jdbc NamedParameterJdbcTemplate 在网站上组织搜索功能 public List
  • 数据库中的“已删除行”指示器?

    如您所知 dBase 没有 x64 驱动程序 来自Visual FoxPro 常见问题解答 https learn microsoft com en us previous versions visualstudio foxpro mt49
  • 如何使用 Azure 代理 AD 和 ADAL 在 SharePoint On Prem 上进行身份验证?

    我正在尝试调用使用 Azure 代理 AD 发布的 SharePoint 2013 服务器上托管的 Rest Web 服务 如下所述 柯克 埃文斯博客 http blogs msdn com b kaevans archive 2015 0
  • 用 jQuery 改变按钮的功能?

    这可能是一个愚蠢的问题 但我就是无法正确回答 我可以使用普通 JavaScript 更改按钮的功能 但不能使用 jQuery 我的目标是一个非常简单的文本调整大小按钮 这个按钮需要两个不同的功能 一个使文本变大并将单击功能更改为另一个功能
  • Clickup 按列表中的状态获取任务

    我想从 Clickup 中的列表中检索指定状态的任务 但我一直收到空响应 资源 https jsapi apiary io apis clickup20 reference 0 tasks get tasks html https jsap
  • 更改密码 - Spring Security

    我有一个 Spring MVC 3 0 应用程序 并实现了 Spring Security 我正在创建一个小弹出窗口来更改当前登录用户的密码 一切都很好 直到我将表格发布到以下操作 RequestMapping value principa
  • 标头正确,但未找到标识符

    我有两个项目 x64 A 用 C 编写 wxWidgets 编辑 它是用 C 编写的 B 用 C 编写 A编译得很好 但是B 它使用的函数A 当我尝试编译时出现几个错误 我认为所有错误的原因都是相同的 所以我只提到第一个 它说 strlen
  • 使用 Appium 自动化 iOS 8 应用程序导致应用程序冻结

    我们有一个使用 Appium 运行自动化测试的应用程序 我们可以通过Appium在设备和模拟器上启动应用程序 但是 在 Appium 发送 2 3 个点击命令后 应用程序会挂起并冻结 冻结后 Appium 在屏幕上找不到任何其他元素 我们考
  • 在 Django 模板中使用正则表达式

    我想知道是否可以在 Django 模板中使用正则表达式 a href form deal template name value a 我想用 替换空格和点 否则链接将无法到达目标 form deal template name value
  • 克隆背景图像并在文件名中添加括号

    我有一个背景图像 文件名中带有括号 div div 这通常很好 并且不会造成混淆 因为文件名周围有引号 然而 在 IE 的开发人员工具中 我发现浏览器出于某种原因删除了引号 div div 尽管如此 它仍然有效 所以没什么大不了的 当我尝试
  • 收益率和违约情况 ||不输出默认情况

    我有一个简单的收益用例 由于某种未知的原因 默认情况从未显示 在我的 super admin 布局中 我有 我的控制器 class Superadmin GolfsController lt ApplicationController la
  • com.microsoft.sqlserver.jdbc.SQLServerException:索引 2 超出范围:(

    我在java中有以下代码 qry insert into usr auth usrid username password email values ps con prepareStatement qry ps setString 1 ge
  • 如何获取时间序列数据的缩放级别作为 Dash 中的回调输入

    给定 Dash Plotly 仪表板中包含时间序列数据的折线图 当我放大并且 x 轴 时间戳 的分辨率发生变化时 如何捕获它作为另一个回调的输入 我想要实现的是 图 B 根据图 A 的缩放显示数据 当图 A 放大时 图 B 会自动跟随 请注
  • Azure AD 服务器身份验证,无权限查看目录

    我创建了一个 Xamarin Forms 项目和一个 Table API 项目 两者都是通过 Azure 门户中的快速启动菜单创建的 我已在门户中配置了 Azure AD 并且可以通过我的 XForms 应用程序成功从 AD 检索令牌 但是