# OAuth
pac4j 允许你使用 OAuth v1.0 和 v2.0 协议认证提供者(identity provider)。
# 1)依赖
你需要使用以下模块:pac4j-oauth
。
示例(Maven dependency):
<dependency>
<groupId>org.pac4j</groupId>
<artifactId>pac4j-oauth</artifactId>
<version>${pac4j.version}</version>
</dependency>
1
2
3
4
5
2
3
4
5
# 2)可用的客户端
# a)通用客户端
你可以使用 OAuth10Client (opens new window) 或 OAuth20Client (opens new window) 客户端登录 OAuth1.0 或 2.0 服务器。在后一种情况下,可以使用 GenericApi20 (opens new window)。
模拟 BitbucketClient
示例:
OAuth10Configuration config = new OAuth10Configuration();
config.setKey("bjEt8BMpLwFDqZUvp6");
config.setSecret("NN6fVXRTcV2qYVejVLZqxBRqHgn3ygD4");
config.setApi(new BitBucketApi());
config.setProfileDefinition(new BitbucketProfileDefinition());
OAuth10Client client = new OAuth10Client();
client.setCallbackUrl(PAC4J_BASE_URL);
client.setConfiguration(config);
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
模拟 GithubClient
示例:
OAuth20Configuration config = new OAuth20Configuration();
config.setApi(GitHubApi.instance());
config.setProfileDefinition(new GitHubProfileDefinition());
config.setScope("user");
config.setKey("62374f5573a89a8f9900");
config.setSecret("01dd26d60447677ceb7399fb4c744f545bb86359");
OAuth20Client client = new OAuth20Client();
client.setConfiguration(config);
client.setCallbackUrl(PAC4J_BASE_URL);
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
模拟 GenericOAuth20Client
示例。
我们可以为每个配置文件属性设置适当的转换器。
例如,由以下表达式指定的类型:
String|name
不要使用以下表达式指定类型:
name
当前支持类型为:Integer
、Boolean
、Color
、Gender
、Locale
、Long
、URI
和 String
(未指定时默认)
注意:如果配置文件包含非字符类型字段,并且你尚未指定该类型,则它将丢失,因此你必须为任何非字符配置文件字段指定类型。
GenericOAuth20Client client = new GenericOAuth20Client();
Map map = new HashMap();
map.put(AGE, "Integer|age");
map.put(IS_ADMIN, "Boolean|is_admin");
map.put(BG_COLOR, "Color|bg_color");
map.put(GENDER, "Gender|gender");
map.put(BIRTHDAY, "Locale|birthday");
map.put(ID, "Long|id");
map.put(BLOG, "URI|blog");
map.put("name", "name"); //default String
client.setProfileAttrs(map);
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
# b)特定客户端
默认情况下,已有许多客户端可以用于很多认证提供者登录:
示例:
FacebookClient facebookClient = new FacebookClient("145278422258960", "be21409ba8f39b5dae2a7de525484da8");
TwitterClient twitterClient = new TwitterClient("CoxUiYwQOSFDReZYdjigBA", "2kAzunH5Btc4gRSaMr7D7MkyoJ5u1VzbOOzE8rBofs");
1
2
2