【发布时间】:2021-11-16 05:11:51
【问题描述】:
有没有什么方法可以在不使用 Retrofit 以外的第三方库的情况下使用 OAuth 2 进行身份验证?
【问题讨论】:
有没有什么方法可以在不使用 Retrofit 以外的第三方库的情况下使用 OAuth 2 进行身份验证?
【问题讨论】:
如果您谈论的是基于 Bearer 令牌的身份验证,您只需在请求中添加“授权”标头即可。
如果你使用 HttpURLConnection
URL url = new URL("http://www.my-back-end.com/");
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
urlConnection.setRequestProperty("Authorization", "Bearer yourToken");
urlConnection.setRequestMethod("POST"); // Can be GET or something else
try {
InputStream in = new BufferedInputStream(urlConnection.getInputStream());
parseResponse(in);
} finally {
urlConnection.disconnect();
}
【讨论】:
鼓励移动应用满足RFC8252 中的要求,其中最重要的两个是:
用户通过系统浏览器登录,因此应用永远不会看到密码。在 Android 上,最用户友好的方式是使用 Chrome 自定义标签,就像 Gmail 和其他安全应用所使用的那样。
使用基于标准的授权代码流 (PKCE),包括各种安全检查和棘手的 HTTP 语言。
您可以自己编写代码,但 Retrofit 基于 JSON,OAuth 消息基于浏览器重定向和表单 URL 编码的帖子。
推荐的 Android 解决方案是使用 AppAuth 库来实现这些要求 - 我的 blog post 展示了它的外观并让您能够快速运行工作应用程序。不过,完整的解决方案并不是一项快速的工作,可能需要与利益相关者进行讨论。
实施 OAuth 后,用户体验有潜在的好处,例如使用 WebAuthn 进行安全无密码登录。
【讨论】: