Azure移动服务和Azure Web App身份验证

JCB*_*JCB 5 azure claims-based-identity azure-web-sites azure-mobile-services azure-active-directory

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

建立

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

Xamarin iOS应用程序与Microsoft.WindowsAzure.Mobile.Client SDK Azure B2C AAD

用户在网上

我得到的是Object Adentifier值,即AAD SID:

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

移动用户

我只获得Nameidentifier值而没有ObjectIdentifier

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

SID完全不同,用户通过Mobile进行身份验证的SID获取SID:xxxx,而来自Web获取xxx

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

谢谢

Azi*_*iel 1

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

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

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

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

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

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

另一种策略是从客户端应用程序使用 ADAL ( 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

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

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