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

标签 azure azure-web-app-service azure-mobile-services azure-active-directory claims-based-identity

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

设置

带有 API Controller 的 Azure WebApp ASP.NET 5

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

网络用户

我得到了 AAD SID 的 ObjectIdentifier 值:

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认证的SID获取xxx

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

谢谢

最佳答案

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

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

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

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

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

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

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

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

关于Azure 移动服务和 Azure Web 应用身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36229919/

相关文章:

entity-framework - 如何 POST/PATCH 到 Azure 移动服务上的多对多关系实体?

javascript - 使用azure移动服务html客户端插入查询参数

amazon-web-services - 在 AWS、Azure 或 Google Cloud 等主要参与者托管时,我可以相信我的代码和表结构不会被复制吗?

azure - Azure 云服务的 SSL 证书

azure - 在lftp中处理$登录用户名

iphone - 在 iOS 上将属性从一个 Controller 传递到另一个 Controller

Azure 终结点 'resourceTargetId' 的 'vm1-TF' 属性无效或丢失

azure - 如何阻止 Azure APIM 中的恶意请求重复达到速率或配额限制?

azure-web-app-service - 发布管理 Azure 网站

web-services - 从 Azure Web 应用程序使用 SOAP Web 服务