Xamarin 和 Auth0 - 获取刷新令牌

Posted

技术标签:

【中文标题】Xamarin 和 Auth0 - 获取刷新令牌【英文标题】:Xamarin and Auth0 - getting refresh tokens 【发布时间】:2017-12-28 02:31:20 【问题描述】:

我按照 auth0 提供的指南进行了身份验证,但我已经厌倦了每次打开应用程序时都必须登录并想要开始存储和利用刷新令牌。但是我似乎无法获得刷新令牌,它始终为空。

在我的 LoginActivity 中,我有以下内容

_client = new Auth0Client(new Auth0ClientOptions
        
            Domain = Resources.GetString(Resource.String.auth0_domain),
            ClientId = Resources.GetString(Resource.String.auth0_client_id),
            //Scope = "offline_access",
            Activity = this
        );

并像这样处理登录

_authorizeState = await _client.PrepareLoginAsync(new  audience = "myaudience.blahblahblah");


 protected override async void OnNewIntent(Intent intent)
    
        base.OnNewIntent(intent);

        var loginResult = await _client.ProcessResponseAsync(intent.DataString, _authorizeState);

        var sb = new StringBuilder();
        if (loginResult.IsError)
        
            sb.AppendLine($"An error occurred during login: loginResult.Error");
        
        else
        
            var mainActivity = new Intent(this, typeof(MainActivity));
            mainActivity.PutExtra("token", loginResult.AccessToken);
            StartActivity(mainActivity);
            Finish();
        
    

如果我包含范围,那么我会收到一个错误,即响应不包含身份令牌。如果我不包括在内,我就不会获得刷新令牌。

【问题讨论】:

您使用的是什么 OAuth-Library?这可能有助于遵循您的流程。 【参考方案1】:

对我来说,诀窍是添加 Scope 行,如下所示。

原代码:

client = new Auth0Client(new Auth0ClientOptions

    Domain = Resources.GetString(Resource.String.auth0_domain),
    ClientId = Resources.GetString(Resource.String.auth0_client_id),
    Activity = this
);

改变和工作的一个:

client = new Auth0Client(new Auth0ClientOptions

    Domain = Resources.GetString(Resource.String.auth0_domain),
    ClientId = Resources.GetString(Resource.String.auth0_client_id),
    Activity = this,
    Scope = "openid offline_access"
);

我只试过这个:

Scope = "offline_access"

但是收到一个错误,直到前面的“openid”。

【讨论】:

哦,我已经为此苦苦挣扎多年了!这完全解决了它,谢谢! :)

以上是关于Xamarin 和 Auth0 - 获取刷新令牌的主要内容,如果未能解决你的问题,请参考以下文章

React Native 中的 Auth0 刷新令牌失败并显示 401

是否可以使用我的服务器作为代理来获取 jwt 刷新令牌?

为啥使用 JWT 刷新令牌

登录 Auth0 后找不到如何获取访问令牌

Auth0 Laravel:验证令牌并获取用户信息

Auth0 Laravel 获取 JWT 令牌