# 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 服务器。
模拟 BitbucketClient (OAuth v1.0)的示例:
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 (OAuth v2.0)的示例:
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
对于 OAuth v2.0,你也可以使用 GenericApi20 (opens new window) 或直接使用 GenericOAuth20Client。
示例:
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
你需要定义要从用户配置文件获取的所有属性。你可以只定义属性名称(name)或属性名称以及关联的转换器(Boolean|is_admin)。
目前,支持以下转换器:Integer、Boolean、Color、Gender、Locale、Long、URI 和 String(默认)。
# b)特定客户端
默认情况下,已有许多客户端可以用于很多认证提供者登录:
示例:
FacebookClient facebookClient = new FacebookClient("145278422258960", "be21409ba8f39b5dae2a7de525484da8");
TwitterClient twitterClient = new TwitterClient("CoxUiYwQOSFDReZYdjigBA", "2kAzunH5Btc4gRSaMr7D7MkyoJ5u1VzbOOzE8rBofs");
 1
2
2