Azure Mobile App Service API经过身份验证的用户身份

时间:2017-06-09 05:27:31

标签: .net azure authentication xamarin.forms azure-mobile-services

我有一个Xamarin Forms应用程序,它使用AD B2C进行身份验证,然后在Azure移动应用程序服务中调用API。应用程序服务是使用.NET创建的,并从数据库返回特定于用户的数据。问题是我在TableController服务中获得的用户ID与自定义API控制器服务中的用户ID不同。这两个服务都使用Authorize属性进行设置。

第一个电话是移动应用服务TableController api,它使用以下代码确定用户ID:

((ClaimsPrincipal)用户).FindFirst(ClaimTypes.NameIdentifier)。价值。

客户的主要步骤如下: 1.从AD B2C获取令牌:PublicClientApplication.AcquireTokenAsync() 2.使用令牌登录移动应用服务:MobileServiceClient.LoginAsync(在有效负载中传递令牌) 3.调用移动应用服务TableController API:IMobileServiceTable.ToEnumerableAsync()

这似乎很好。在表控制器中,从NameIdentifier声明中检索用户ID的值。此时的值始终采用以下格式:" sid:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" (x是十六进制字符)。

然后客户端调用另一个服务,该服务是ApiController(具有MobileAppController属性)。该服务使用与上面相同的代码来获取用户ID(来自NameIdentifier声明)。但是检索的用户ID与TableController检索的用户ID不同。

客户端代码基本如下:

    authResult = await B2CPublicClientApp.AcquireTokenAsync();
    string url = [endpoint for the custom api]
    HttpClient client = new HttpClient();
    HttpRequestMessage message = new HttpRequestMessage(HttpMethod.Get, url);
    message.Headers.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", authResult.IdToken);
    HttpResponseMessage response = await client.SendAsync(message);
    string responseString = await response.Content.ReadAsStringAsync();

对自定义API端点的调用成功并且已成功授权,但用户ID不同。用户标识的格式为: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx其中x是十六进制字符。

显然,每次调用任何应用服务器服务时,我都需要一个用户拥有相同的用户ID。

0 个答案:

没有答案
相关问题