Azure MobileApp自定义身份验证,刷新令牌

Azure MobileApp自定义身份验证,刷新令牌,azure,authentication,azure-mobile-services,custom-authentication,Azure,Authentication,Azure Mobile Services,Custom Authentication,我需要我的应用程序来支持对我们的私有数据库的自定义身份验证,按照Adrian Hall book的建议,我对我的用户进行身份验证没有问题。当我需要刷新访问令牌时,问题就出现了。 由于我不得不继续使用custom auth,我有以下问题: 1) 我应该调用MobileServicesClient.RefreshUserAsync(),如果是,我应该在服务器上实现什么类型的端点?它是否会每次重新发行另一个代币,使旧代币失效?什么时候应该进行刷新呼叫 2) 我读过关于使用永不过期的刷新令牌的文章,但是

我需要我的应用程序来支持对我们的私有数据库的自定义身份验证,按照Adrian Hall book的建议,我对我的用户进行身份验证没有问题。当我需要刷新访问令牌时,问题就出现了。 由于我不得不继续使用custom auth,我有以下问题:

1) 我应该调用MobileServicesClient.RefreshUserAsync(),如果是,我应该在服务器上实现什么类型的端点?它是否会每次重新发行另一个代币,使旧代币失效?什么时候应该进行刷新呼叫

2) 我读过关于使用永不过期的刷新令牌的文章,但是我真的找不到一个示例实现,或者关于如何在自定义身份验证场景中实现它的说明,有人能告诉我正确的方向吗

非常感谢

我应该调用MobileServicesClient.RefreshUserAsync(),如果是,我应该在服务器上实现什么类型的端点?它是否会每次重新发行另一个代币,使旧代币失效?什么时候应该进行刷新呼叫

我已检查了Microsoft.WindowsAzure.Mobile.dll中的方法
RefreshUserAsync
,该方法将针对
/.auth/refresh
端点发送get请求,以便与登录用户的提供程序一起刷新访问令牌。由于您使用的是自定义身份验证,因此无法使用此方法刷新
authenticationToken

我读过关于使用永不过期的刷新令牌的文章,但是我真的找不到一个示例实现,或者关于如何在自定义身份验证场景中实现它的说明,有人能告诉我正确的方向吗

使用中的
CreateToken
方法时,您可以将
生存期指定为
null
,然后检索永不过期的
authenticationToken
,如下所示:

JwtSecurityToken token = AppServiceLoginHandler.CreateToken(claims, signingKey, audience, issuer,null);
[Route(".auth/login/customRefreshToken")]
public IHttpActionResult RefreshToken([FromBody] RefreshTokenInput body)
{
    string tokenString = body.AuthenticationToken;
    try
    {
        var jwtSecurityToken = new JwtSecurityToken(tokenString);
        JwtSecurityToken token = AppServiceLoginHandler.CreateToken(jwtSecurityToken.Claims, signingKey, audience, issuer, TimeSpan.FromDays(30));
        return Ok(new LoginResult()
        {
            AuthenticationToken = token.RawData
        });
    }
    catch (Exception e)
    {
        return BadRequest("$Error = {e.Message}, StackTrace = {e.StackTrace}");
    }
}
此外,您可以尝试构建端点,以便基于旧的有效令牌创建新令牌,如下所示:

JwtSecurityToken token = AppServiceLoginHandler.CreateToken(claims, signingKey, audience, issuer,null);
[Route(".auth/login/customRefreshToken")]
public IHttpActionResult RefreshToken([FromBody] RefreshTokenInput body)
{
    string tokenString = body.AuthenticationToken;
    try
    {
        var jwtSecurityToken = new JwtSecurityToken(tokenString);
        JwtSecurityToken token = AppServiceLoginHandler.CreateToken(jwtSecurityToken.Claims, signingKey, audience, issuer, TimeSpan.FromDays(30));
        return Ok(new LoginResult()
        {
            AuthenticationToken = token.RawData
        });
    }
    catch (Exception e)
    {
        return BadRequest("$Error = {e.Message}, StackTrace = {e.StackTrace}");
    }
}
注意:对于您的移动客户端,您可以使用
MobileServiceClient.InvokeApiAsync
检索新令牌,然后解析
authenticationToken
并将其更新为
MobileServiceClient.CurrentUser.MobileServiceAuthenticationToken

结果


您是否已解决此问题,是否需要进一步帮助?