Azure 移动服务和 Azure Web 应用身份验证

2024-04-22

当用户通过 Azure Web 应用程序 (ASP.NET MVC) 和 Xamarin.iOS 应用程序登录时,我为同一用户获得两个不同的 SID

Setup

带有 API 控制器的 Azure WebApp ASP.NET 5

带有 Microsoft.WindowsAzure.Mobile.Client SDK 的 Xamarin iOS 应用程序 Azure B2C AAD

网络上的用户

我得到的 ObjectIdentifier 值是 AAD SID:

var userClaim = ClaimsPrincipal.Current.FindFirst("http://schemas.microsoft.com/identity/claims/objectidentifier").Value;

移动用户

我只得到 Nameidentifier 值,没有 ObjectIdentifier

ClaimsPrincipal mobileUser = this.User as ClaimsPrincipal;
var mobileUserClaim = mobileUser.FindFirst("http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier");

SID 完全不同,用户从 Mobile 验证的 SID 获取 SID:xxxx,而从 Web 获取 xxx

我知道如果我设置一个 Azure 移动应用程序和一个 Azure Web 应用程序,则身份验证时的 SID 是相同的。但我不想为我的应用程序的大小(小)管理两个网站。该应用程序的目的是让一个简单的Web应用程序执行一些操作,并在手机上执行相同的操作,从手机我使用Azure移动服务SDK和InvokeAPIAsync来使用Web应用程序中的API控制器。

Thanks


我想澄清一下情况。 您正在观察两个 SID:

1) 从 AAD,通过 Web 浏览器登录 AAD。

2) 来自 Azure 应用程序服务(Web 应用程序和移动应用程序),可能来自我们的客户端使用 LoginAsync。此方法将调用服务器控制的登录流程。

这是设计使然。 MobileServiceClient 获取应用程序服务令牌,并使用该令牌对您的移动应用程序进行身份验证。您可以通过对 .auth/me 端点执行 GET 操作,将从 Azure 应用服务获取的身份验证令牌交换为 AAD SID。

使用应用服务和 AAD 对客户端进行身份验证后,您可以通过调用 yoursite.azurewebsites.net/.auth/me 并解析所需声明的响应来获取有关 AAD 用户(或任何身份提供商)的更多信息:

({“类型”:“http://schemas.microsoft.com/identity/claims/objectidentifier http://schemas.microsoft.com/identity/claims/objectidentifier").

另一种策略是使用 ADAL(http://www.nuget.org/packages/Microsoft.IdentityModel.Clients.ActiveDirectory/ http://www.nuget.org/packages/Microsoft.IdentityModel.Clients.ActiveDirectory/)从客户端应用程序使用 AAD 登录,然后使用 AAD 访问令牌通过适当的 LoginAsync 重载获取移动应用程序令牌:

https://github.com/Azure/azure-mobile-apps-net-client/blob/master/src/Microsoft.WindowsAzure.MobileServices.iOS/Extensions/MobileServiceClientExtensions.cs#L55 https://github.com/Azure/azure-mobile-apps-net-client/blob/master/src/Microsoft.WindowsAzure.MobileServices.iOS/Extensions/MobileServiceClientExtensions.cs#L55

您添加的参数应采用以下格式:{"access_token":"[AAD access_token value]"}

Brett Samblanet 在 .NET 服务器上关于用户 ID 的 wiki 应该有助于理解正在发生的事情:https://github.com/Azure/azure-mobile-apps-net-server/wiki/Understanding-User-Ids https://github.com/Azure/azure-mobile-apps-net-server/wiki/Understanding-User-Ids

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

Azure 移动服务和 Azure Web 应用身份验证 的相关文章

随机推荐

  • java从当前目录读取文件

    我有一个 java 项目 我正在其中读取文件 由于该文件位于当前目录中 我正在这样做 String dataset myFile dat 但我得到 java io FileNotFoundException说找不到该文件 如何解决这个问题
  • 如何开发 Eclipse 搜索插件?

    我想开发一个插件视图 它将自动调用Eclipse中的搜索插件并显示包中调用特定函数的所有位置 帮我 我该怎么办 谢谢 这是另一个很好的插件开发教程http www vogella de articles EclipsePlugIn arti
  • matplotlib savefig() 大小控制

    我编写了一个函数 它采用 Pandas 生成的数据帧并生成热图 def drawHeatMap df city province collector classtype color titleposy try thePlot pl mats
  • TinyMCE 和 Laravel

    我正在尝试在我的 Laravel 项目中使用tinyMCE 问题是当我存储新文章时 html 标签不起作用 它们像纯文本一样显示在我的 laravel 视图上 这是在create blade php中实现的代码
  • cygwin g++ std::stoi“错误:‘stoi’不是‘std’的成员

    I have Windows 7 32 位上的 cygwin 1 7 25 g 版本 gt g GCC 4 8 2 libstdc a gt gcc g 4 8 2 1 试图制作一个c 你好世界 include
  • React Context API - 在页面刷新时保留数据

    假设我们设置了一个上下文提供程序以及一些初始数据属性值 在此过程中 假设消费者随后修改了这些属性 页面重新加载时 这些更改将丢失 保存数据以便我们可以保留这些数据修改的最佳方法是什么 除了本地存储之外还有其他方法吗 是的 如果您希望数据在重
  • 为什么需要在 createToken 方法中传递一个字符串?

    为了在 Laravel Sanctum 中创建访问令牌 需要在createToken方法 我觉得这很奇怪 因为您传入的任何内容都会使用 SHA 256 进行哈希处理 或者您可以获取纯文本令牌 为什么访问令牌不是基于随机字符串创建的 它可以很
  • 从非 UI 线程更新 Windows 窗体上的标签?

    我已经尝试了 2 天来做到这一点 我查看了大量的 stackoverflow 答案并尝试了所有答案 但仍然遇到同样的问题 我在 Windows 窗体上有一个标签 此 Windows 窗体上的唯一代码是 var thread1 new Thr
  • PowerShell参数值建议

    我用 C 编写了一个 Cmdlet 是否可以为特定字符串参数提供所有可能的值 此示例为 PackageId public sealed class InstallPackageCommand PSCmdlet Parameter Posit
  • c++17 有效地将参数包参数与 std::array 元素相乘

    我想有效地将 参数包中的参数与 std array 的元素相乘 int index auto Is std array
  • 散景布局的背景颜色

    我正在玩散景滑块演示 https demo bokehplots com apps sliders 源代码here https github com bokeh bokeh blob master examples app sliders
  • 在WPF中设置鼠标位置[重复]

    这个问题在这里已经有答案了 我打算用 Kinect 手势替换我的鼠标 但我找不到为 WPF 应用程序设置鼠标位置的方法 无法使用 NET BCL 但是 如果您确实想要它 您可以使用本机SetCursorPos in User32 dll D
  • 使用 JPA 和 Hibernate 将 Java 布尔值映射到 Oracle Number 列

    我在我的模型中创建了这样的属性 public class Client private Boolean active 我的 RDBMS 是 Oracle active列的类型NUMBER 1 0 如何使用Restrictions API实现
  • MySQL:具有授予选项的用户无法授予创建用户

    我创建了一个具有 root 的用户 new user 如下所示 GRANT ALL ON labor TO new user WITH GRANT OPTION GRANT ALL ON labor TO new user localhos
  • 姜戈 - 403 禁止。 CSRF 令牌缺失或不正确

    我尝试为我的模型添加 ModelForm 但每次 POST 尝试都以 403 Forbidden CSRF 验证失败 请求中止 失败原因给出 CSRF 令牌丢失或不正确 结束 我没有 render to response 方法 因此无法通过
  • 如何禁用/覆盖 PowerShell 点表示法

    PowerShell 中的命令几乎与 Bash 类似 但点符号扩展给我带来了很多工作 目前我必须将很多命令参数用引号引起来 mvnw cmd Dmaven repo local m2 repository deploy deploy fil
  • winkler的Python性能改进请求

    我是一个 python n00b 我想要一些关于如何改进算法的建议 以提高计算两个名字的 Jaro Winkler 距离的方法的性能 def winklerCompareP str1 str2 Return approximate stri
  • 为什么 ng-mouseover 不能与 ng-if 一起使用

    我试图在具有 ng if 的图像上使用 ng mouseover 指令 但它不起作用 但如果我使用 ng show 指令它起作用 每个人都可以告诉我为什么吗 或者这是 AngularJS 的问题 在 AngularJS 文档中 我无法阅读任
  • WooCommerce 挂钩 woocommerce_cancelled_order

    再会 这是我第一次使用 stackoverflow 很高兴认识大家 不管怎样 我正在为 WooCommerce 编写一个插件 当订单取消时我会自动退款 当我在没有钩子的情况下在单独的文件中手动执行它时 我的代码工作正常 但是 使用我的钩子它
  • Azure 移动服务和 Azure Web 应用身份验证

    当用户通过 Azure Web 应用程序 ASP NET MVC 和 Xamarin iOS 应用程序登录时 我为同一用户获得两个不同的 SID Setup 带有 API 控制器的 Azure WebApp ASP NET 5 带有 Mic