Azure Mobile App在服务器上刷新令牌

时间:2016-08-11 23:31:41

标签: authentication xamarin.forms azure-web-sites azure-mobile-services

以下是背景资料:

  • 需要使用google / facebook / msa
  • 进行身份验证
  • 需要将自己的声明添加到MobileServiceAuthenticationToken以便在客户端上使用
  • 想拥有刷新令牌功能(我知道FB没有这个功能)

我的工作是LoginAsync并获得了MobileServiceAuthenticationToken。然后我调用一个自定义auth控制器,它具有[Authorize]属性。

自定义身份验证控制器从主体复制一些声明然后将我们的声明添加到这些声明并创建一个新的令牌,并将其返回给客户端。

对所有这些使用LoginAsync可以保持所有通话的代币流动,这很棒。

因此,令牌过期,我在客户端上调用RefreshUserAsync。此时,带有我们自定义声明的MobileServiceAuthenticationToken将替换为MobileAppService中的默认声明,而不是我们的声明。我希望如此。

所以现在我必须再次调用自定义身份验证控制器以将我们的声明添加回身份令牌。

这样可行,但感觉很笨拙。这是两次往返。

我正在寻找的是刷新服务器端的身份提供者访问令牌,并以相同的方法,用我们的东西更新身份令牌。

我知道来自客户端的/.auth/refresh来电是RefreshUserAsync的替代方案。在没有设置整个System.Net.Http.HttpClient的情况下,我可以从后端的控制器进行类似的调用吗?

例如:我在后端使用this.User.GetAppServiceIdentityAsync<GoogleCredentials>( this.Request )来获取身份提供者信息,而无需进行HTTP调用。

那样的东西?

提前致谢。

1 个答案:

答案 0 :(得分:2)

短版 - 没有。

更长的版本 - 您需要代表用户在后端调用/.auth/refresh,然后添加您的声明。 /.auth端点位于您的后端无法访问的其他服务上,除非通过Http。

GetAppServiceIdentityAsync()方法仍然会进行HttpClient调用,因此您无法自行保存往返。