背景如下:
- 需要通过 google/facebook/msa 进行身份验证
- 需要将我们自己的声明添加到
MobileServiceAuthenticationToken
用于客户端 - 想要拥有刷新 token 功能(我知道 FB 没有)
我有这个工作 LoginAsync
并得到 MobileServiceAuthenticationToken
后退。然后我调用一个自定义身份验证 Controller ,它有 [Authorize]
属性。
自定义身份验证 Controller 从主体复制一些声明,然后将我们的声明添加到这些声明中并创建一个新 token ,并将其返回给客户端。
使用LoginAsync
所有这一切都使所有调用的代币保持流动,这很棒。
因此, token 过期,我调用 RefreshUserAsync
在客户端上。此时MobileServiceAuthenticationToken
带有我们的自定义声明的内容将替换为来自 MobileAppService 的默认声明(不含我们的声明)。我希望如此。
所以现在我必须再次调用自定义身份验证 Controller 才能将我们的声明添加回身份 token 。
这可行,但感觉很笨拙。这是两次往返。
我正在寻找的是在服务器端刷新身份提供者访问 token ,并以相同的方法,用我们的东西更新身份 token 。
我知道 /.auth/refresh
从客户端调用作为 RefreshUserAsync
的替代方案。我可以从后端的 Controller 进行类似的调用,而无需设置整个System.Net.Http.HttpClient
事物?
例如:我使用 this.User.GetAppServiceIdentityAsync<GoogleCredentials>( this.Request )
在后端获取身份提供商信息,而无需进行 HTTP 调用。
类似的事情?
提前致谢。
最佳答案
简短版本 - 否。
更长的版本 - 您需要代表用户在后端调用/.auth/refresh,然后添加您的声明。/.auth 端点位于不同的服务上,您的后端无法访问该服务(除非通过 Http)。
GetAppServiceIdentityAsync()
方法仍然执行 HttpClient 调用,因此您不会节省往返时间。
关于authentication - Azure移动应用程序刷新服务器上的 token ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38907641/