通过共享首选项在安卓设备上保存access_token

4

我的应用从服务器获取一些响应,其中我还收到访问令牌,我必须在进一步的操作中使用它,总的来说,我成功地从响应中提取了这个令牌,现在我可以在textView中看到它。但无论如何,我必须创建像刷新以下令牌这样的东西,因为我认为我的用户不会很高兴在当前令牌过期后多次登录我的应用程序。所以现在我有一个非常严肃的问题,就是如何将我从响应中获得的以下令牌插入到我的请求中:

@Headers({"Content-type: application/json",
        "Authorization: Bearer my token"})
@GET("/v1/message/list")
Call<ListOfMess> getInMess(@Query("type") int type, @Query("offset") int offset);

现在我每隔半小时都需要插入最后一个令牌,否则我将无法获取任何数据。我尝试将以下令牌插入到我的Retrofit初始化中:

Retrofit retrofit = new Retrofit.Builder()
                .baseUrl("https://server/")
                .client(client)
                .addConverterFactory(GsonConverterFactory.create())
                .build();

但它没有正常工作。所以过了一段时间,我知道我可以通过sharedpreferences存储以下令牌,然后在任何地方插入它,但我不知道如何创建它。我希望你能帮我解决这个问题。如果您知道如何通过某个请求在一段时间后刷新我的令牌,我将很高兴看到您的答案)) 对于我的语言技能不好,我感到抱歉。

你的应用程序通常无法查看访问令牌内部以找出其到期时间。相反,当向服务器呈现令牌时,它会在某个时候发现令牌已过期/无效。此时,你必须从应用程序重新进行身份验证。你的其余问题难以理解。过去,我已将访问令牌作为明文字符串存储在共享首选项中。 - Tim Biegeleisen
是的,我同意你的观点。我认为我会创建一个在小于0.5小时的时间段内获取新令牌的响应,但我不明白如何保存当前令牌,然后如何将其插入到我的接口中? - Andrew
我不理解你在这里尝试做什么。 - Tim Biegeleisen
我正在尝试将最新的令牌插入到我的接口头中,并在需要时进行刷新。目前,我必须手动插入我的最后一个令牌,但我希望从服务器的成功响应中获取以下令牌,然后将其插入到我的接口中,并在一小段时间后进行刷新。 - Andrew
1个回答

8
    //Save token here
    String token = "Some token From Server";
    SharedPreferences preferences = getActivity().getSharedPreferences("MY_APP",Context.MODE_PRIVATE);
    preferences.edit().putString("TOKEN",token).apply();


    //Retrieve token wherever necessary
    SharedPreferences preferences = getActivity().getSharedPreferences("MY_APP",Context.MODE_PRIVATE);
    String retrivedToken  = preferences.getString("TOKEN",null);//second parameter default value.

很好,我的问题是:将access_token和refresh_token存储到共享首选项中是否安全可靠? - Ritesh Aryal
我是指:一旦应用程序关闭并稍后重新打开,我是否能够访问它? - Ritesh Aryal
当然可以,你重新打开应用程序后就可以检索到令牌。 - Gnanendra Kumar
安全性如何?插件在哪里存储像令牌这样的安全项目?它是存储在localStorage还是文件中?它如何保护我的设备上的令牌,请解释。 - Ritesh Aryal

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接