2

这里Azure的移动应用清爽令牌的背景:服务器上

  • 需要与谷歌/ Facebook的/ MSA认证
  • 需要我们自己的要求添加到MobileServiceAuthenticationToken使用在客户端
  • 想拥有刷新令牌功能(我知道FB没有)

我有这个工作LoginAsync并得到MobileServiceAuthenticationToken回来。然后我调用一个自定义验证控制器,该控制器上有一个[Authorize]属性。

自定义身份验证控制器从委托人复制了一些声明,然后将这些声明添加到这些声明中,并创建一个返回给客户端的新令牌。

使用LoginAsync所有这些保持令牌流向所有呼叫,这很好。

因此,令牌到期,我在客户端上呼叫RefreshUserAsync。此时,使用我们的定制声明的MobileServiceAuthenticationToken将由MobileAppService中的默认声明替代,而无需声明。我期待这一点。

所以现在我必须再次调用自定义授权控制器才能将我们的权利要求添加回身份令牌。

这个工程,但它感觉笨拙。这是两次往返。

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

我知道/.auth/refresh来自客户端的呼叫作为RefreshUserAsync的替代方案。有没有类似的调用,我可以从我的控制器在后端没有设置整个System.Net.Http.HttpClient事情?

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

这样的事情?

在此先感谢。

回答

2

简短版本 - 没有。

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

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

+0

谢谢。并感谢您的快速回复! – nhwilly

+1

因为我不知道幕后会发生什么,所以这可能是一个愚蠢的假设......但是,我需要对从后端生成的对'/ .auth/refresh'调用返回的响应进行任何操作吗?是内部更新,我不能看到?因为我刚刚将这个.Request的所有头文件复制到了我的后端HttpClient并进行了调用,它似乎正在工作。似乎太容易:)。 – nhwilly

+0

实际上,我每次都会获得新的访问令牌,并且他们最终会以凭据形式结束。完善。谢谢,阿德里安! – nhwilly