当前位置: 首页 > 面试题库 >

在Box Android API中加载,保存和使用身份验证数据

乐宜民
2023-03-14
问题内容

我最近一直在尝试在Android应用程序中实现Box。我知道如何启动身份验证活动并使BoxAndroidClient对象准备好对其进行操作,但是我不知道如何保存令牌(SharedPreferences?),如何加载令牌以及如何使用已加载的令牌进行身份验证,因此用户不会每当他想访问他在云中的文件时,都可以登录到他的邮箱帐户。

我试图刷新以前保存的令牌(由于Exception告诉我AccessToken不正确)。

BoxAndroidOAuthData data = new BoxAndroidOAuthData(new HashMap<String, Object>(){
    private static final long serialVersionUID = 1L;
    {
        put(BoxAndroidOAuthData.FIELD_ACCESS_TOKEN, prefs.acc);
        put(BoxAndroidOAuthData.FIELD_REFRESH_TOKEN, prefs.ref);
        put(BoxAndroidOAuthData.FIELD_EXPIRES_IN, prefs.exp);
        put(BoxAndroidOAuthData.FIELD_TOKEN_TYPE, prefs.typ);
    }
});
data = new BoxAndroidOAuthData(client.getOAuthManager().refreshOAuth(BoxOAuthRequestObject.refreshOAuthRequestObject(data.getRefreshToken(), C, S)));

我还有一个例外:

07-02 22:07:16.433: W/System.err(4684): com.box.restclientv2.exceptions.BoxRestException: Unexpected token (END_OBJECT), expected FIELD_NAME: missing property 'type' that is to contain type id  (for class com.box.boxjavalibv2.dao.BoxServerError)
07-02 22:07:16.433: W/System.err(4684):  at [Source: java.io.StringReader@b55b2c78; line: 1, column: 69]
07-02 22:07:16.433: W/System.err(4684):     at com.box.restclientv2.responseparsers.DefaultBoxJSONResponseParser.parse(DefaultBoxJSONResponseParser.java:75)
07-02 22:07:16.433: W/System.err(4684):     at com.box.boxjavalibv2.responseparsers.ErrorResponseParser.parse(ErrorResponseParser.java:31)
07-02 22:07:16.433: W/System.err(4684):     at com.box.restclientv2.responses.DefaultBoxResponse.parseResponse(DefaultBoxResponse.java:51)
07-02 22:07:16.433: W/System.err(4684):     at com.box.boxjavalibv2.resourcemanagers.BoxResourceManager.getResponseAndParse(BoxResourceManager.java:168)
07-02 22:07:16.433: W/System.err(4684):     at com.box.boxjavalibv2.resourcemanagers.BoxResourceManager.getResponseAndParseAndTryCast(BoxResourceManager.java:143)
07-02 22:07:16.433: W/System.err(4684):     at com.box.boxjavalibv2.resourcemanagers.BoxOAuthManager.refreshOAuth(BoxOAuthManager.java:68)

由于我还没有找到有关如何正确执行Java中auth部分的教程(SDK中包含的示例未涵盖任何保存令牌的方法),有人可以为此提供一个很好的示例吗?


问题答案:

您不需要自己刷新令牌,sdk会为您完成。因此,即使您的访问令牌不正确,只要刷新令牌正确,SDK也会为您提供一个新的访问令牌。

BoxAndroidOAuthData对象是可打包的,因此可以通过这种方式保存。也可以通过toJSONString(new
ObjectMapper())将其序列化为json字符串,并通过Utils.parseJSONStringIntoObject(jsonString,BoxAndroidOAuthData.class)从json字符串反序列化,因此也可以将其保存为字符串。Sharedpreference是一种选择,尽管它可能没有您想要的安全。

作为最简单(不是最好的)示例:1.保存身份验证: sharedPref.edit().putString("auth", authData.toJSONString(new ObjectMapper()); 2.加载身份验证: BoxAndroidOAuthData authData = Utils.parseJSONStringIntoObject(sharedPref.getString("auth"), BoxAndroidOAuthData.class); boxClient.authenticate(authData);
请注意,只要BoxAndroidOAuthData中的刷新令牌仍然有效,就不必担心刷新访问令牌sdk为您刷新。如果您的刷新令牌无效,则sdk会抛出AuthFatalFailureException,您的应用需要对其进行处理。



 类似资料:
  • 我必须使用laravelajax将数据保存在具有userid的数据库表中。谁能帮我解决这个问题 我的控制器代码 它得到的反应是 我必须保存登录用户ID提交......我user_id空我怎么存储user_id请帮帮我。 提前谢谢

  • 我已经开始开发一个由Google的Firebase服务提供支持的应用程序。我很好奇数据传输在Auth和数据库服务中是否安全。如果没有,我是否可以阅读任何材料来源以实现加密? 非常感谢。

  • 我在注册过程中从用户那里得到了一些信息。我希望每个用户名都是唯一的。我称我的方法如下。 其内容如下。 方法无法向我的变量添加真布尔值。我想,addOnCompleteListener在为我的布尔值赋值时并没有结束。 但是,如果用户名控制后可以获得用户名,则用户身份验证成功,但不会写入Firebase。这可能是什么原因?我在等待您的帮助。

  • 我在我的Web api项目中使用Swagger: 等等。我们也使用SwaggerUI。工作起来像个符咒。对于生产,我们不希望swagger UI可用,我们希望使用基本身份验证来保护它。Afaik没有现成的此类功能。有没有一种方法可以通过网络api中的某种“黑客”来实现这一点?我可以只为特定的路由或类似的东西注册专用筛选器吗? 感谢你的帮助问候劳琳

  • 我正在尝试制作一个适配器,它将显示给listview实时数据库内容。 带适配器返回null得身份验证: 类: 请求布局:

  • 是否可以在ASP中支持多个JWT令牌发行者。净核心2?我想为外部服务提供一个API,我需要使用两个JWT代币来源——Firebase和定制JWT代币发行人。在ASP。NET core I可以为承载身份验证方案设置JWT身份验证,但只能为一个机构设置: 我可以有多个发行人和受众,但我不能设置多个权限。