Java 小小写个开源 OAuth 客户端工具

2023-01-06 20:56:39 +08:00
 hanbings

目前正在适配常见的国外平台,迟一些会做国内的像 QQ 微信 WB 百度 阿里 什么的

欢迎 Star 跟进! Github:Fluocean

主要特性:

Github OAuth 示例

洋流提供了许多的重载方法,用于应对不同情况下的请求,有些带自有请求头的,也有要求必须要 Scope 的。

// 创建 OAuth 原始处理器
OAuth<GithubAccess, GithubAccess.Wrong> oauth = new GithubOAuth(
	"id",
	"secret",
	"https://exmaple.com/api/v0/login/oauth/github/callback"
);

// 生成授权 url
String url = oauth.authorize();
// 生成带参数或指定 scope
String spec = oauth.authorize(List.of("email"), Map.of("Accept", "application/json"));
        
//解析回调的 url 并获取 token
// 输入原始 url 自动解析 code 以及 state
oauth.token("url");
// 更改回调地址
oauth.token("url", "redirect");
// 手动指定参数
oauth.token("code", "state", "redirect");
        
// 处理返回值
oauth.token("code", "state", "redirect")
	.succeed(data -> System.out.println(data.accessToken()))
	.fail(wrong -> System.out.println(wrong.errorDescription()))
	.except(throwable -> System.out.println(throwable.getMessage()));
        
// 假设请求成功 直接获取数据
GithubAccess access = oauth.token("code", "state", "redirect").data();

使用 Socks 代理

oauth.proxy(() ->
	new Request.Proxy(
		Proxy.Type.SOCKS,
		"127.0.0.1",
		10086,
		"username",
		"password"
	)
);

更换 State 生成器

默认随机生成 UUID 并设置 300 秒有效期

oauth.state(
    Lazy.of(() -> new OAuthState(300, () -> UUID.randomUUID().toString()))
);

更换 Http 客户端

默认使用 Okhttp 发起请求

// 实现比较繁杂 就不展示啦 x
oauth.request(Lazy.of(OAuthRequest::new));

更换 Json 解析器

默认使用 Gson 作为 Json 解析器

oauth.serialization(
	Lazy.of(() -> new Serialization() {
		final Gson gson = new Gson();

		@Override
		public <T> T object(Class<T> type, String raw) {
			return gson.fromJson(raw, type);
		}

		@Override
		public <K, V> Map<K, V> map(Class<K> key, Class<V> value, String raw) {
			return gson.fromJson(raw, new TypeToken<Map<K, V>>() {
			}.getType());
		}

		@Override
		public <T> List<T> list(Class<T> type, String raw) {
			return gson.fromJson(raw, new TypeToken<List<T>>() {
			}.getType());
		}
	})
);
1356 次点击
所在节点   OAuth
4 条回复
EvanLuo42
2023-01-06 21:32:37 +08:00
可以,但是好像有 justauth 了?
hanbings
2023-01-06 21:49:01 +08:00
@EvanLuo42 你好,我了解过 JustAuth​,以前也是 JustAuth 的用户,不可否认的是它能做到万星项目和 GVIP 说明它很受欢迎、很流行。但是 JustAuth 目前更新缓慢,不支持很多国外的平台需要自己手动适配,不支持更换 Json 解析器(这个问题已经很久了,相关 issue 都半年以上了,默认的解析器是名声不太好的 fastjson 大家都懂)。没有详细的贡献指南让我实在有点无从下手去贡献代码,权衡之下,我还是决定多造一次轮子了,感谢你的支持!
brrruski
2023-01-06 22:44:11 +08:00
关注一波 有这方面需求
hanbings
2023-01-07 15:24:54 +08:00
@brrruski 因为是个人项目,如果有什么具体需求,比如某个特性支持或者某个比较小众的平台也可以提出来适配的,感谢支持啦!

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/907085

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX