Spring Security
Casdoor 可以使用 OIDC 协议作为IDP 连接各种应用程序。 这里我们将使用Spring Security作为示例来告诉您如何使用 OIDC 连接到您的应用程序。
步骤1。 部署Casdoor
第一,应部署Casdoor。
您可以参考 服务器安装 的 Casdoor 官方文档。
在成功部署后,您需要确保:
- Casto服务器已成功运行在 http://localhost:8000 上。
- 打开您最喜欢的浏览器并访问 http://localhost:7001,您将看到Cassdoor的登录页面。
- 输入
admin
and123
测试登录功能正常工作。
然后您可以通过以下步骤在自己的应用程序中快速实现基于腰果的登录页面。
第2步: 配置连锁应用
- 创建或使用现有的 Casdoor 应用程序。
- 添加您的重定向url
- 添加您想要的提供商并补充其他设置。
不足为奇。 您可以在应用程序设置页面获得两个值: 客户端 ID
和 客户端密钥
就像上面的图片一样。 我们将在下一步骤中使用它们。
打开您最喜欢的浏览器并访问: http://`CASDOOR_HOSTNAME`/.well known / openid-configur, 您将看到OIDC 配置Casdoor。
步骤3. 配置Spring Security
Spring Security nally support OIDC.
您可以自定义Spring Security OAuth2 客户端的设置:
:::注意事项
您应该用您自己的 Casdoor 实例替换配置,特别是 <Client ID>
和其他。
:::
- application.yml
- application.properties
spring:
security:
oauth2:
client:
registration:
casdoor:
client-id: <Client ID>
client-secret: <Client Secret>
scope: <Scope>
authorization-grant-type: authorization_code
redirect-uri: <Redirect URL>
provider:
casdoor:
authorization-uri: http://CASDOOR_HOSTNAME:7001/login/oauth/authorize
token-uri: http://CASDOOR_HOSTNAME:8000/api/login/oauth/access_token
user-info-uri: http://CASDOOR_HOSTNAME:8000/api/get-account
user-name-attribute: name
spring.security.oauth2.client.registration.casdoor.client-id=<Client ID>
spring.security.oauth2.client.registration.casdoor.client-secret=<Client Secret>
spring.security.oauth2.client.registration.casdoor.scope=<Scope>
spring.security.oauth2.client.registration.casdoor.authorization-grant-type=authorization_code
spring.security.oauth2.client.registration.casdoor.redirect-uri=<Redirect URL>
spring.security.oauth2.client.provider.casdoor.authorization-uri=http://CASDOOR_HOSTNAME:7001/login/oauth/authorize
spring.security.oauth2.client.provider.casdoor.token-uri=http://CASDOOR_HOSTNAME:8000/api/login/oauth/access_token
spring.security.oauth2.client.provider.casdoor.user-info-uri=http://CASDOOR_HOSTNAME:8000/api/get-account
spring.security.oauth2.client.provider.casdoor.user-name-attribute=name
您也可以通过 客户端注册
在您的代码中自定义设置。 您可以在这里找到映射
第4步: 从演示开始
- 我们可以创建Spring启动应用程序。
- 我们可以添加一个配置,保护所有端点,除了
/
和/login**
用户登录。
@EnableWebSecurity
公共类 UiSecurityConfig extends WebSecurityConfigurerAdapter
@Override
受保护的无效configure(HttpSecurity http) 丢弃异常。
http. uthorizeRequests().antMatchers("/", "/login**").permitAll().anyRequest().authent.authent().anti-matchers("/", "/login**").permitall().permanit().anyrequest().authent().authent().authent().authent().atent(). nd()
. auth2Login();
}
}
- 我们可以为用户添加一个虚拟页面来登录。
<OCTYPE html>
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Spring OAuth Client Thymeleaf - 1</title>
<link rel="stylesheet"
href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css" />
</head>
<body>
<nav
class="navbar navbar-expand-lg navbar-light bg-light shadow-sm p-3 mb-5">
<a class="navbar-brand" th:href="@{/foos/}">Spring OAuth Client
Thymeleaf - 1</a>
</nav>
<div class="container">
<label>欢迎! </label> <br /> <a th:href="@{/foos/}"
class="btn btn-primary">登录</a>
</div>
</body>
</html>
当用户点击 登录
按钮时,他将会被重定向到 腰门
。
- 接下来,我们可以定义我们受保护的资源。 我们可以导出一个名为
/foos
的端点和一个网页以显示。
数据模型
public class FooModel {
private Long id;
private String name;
public FooModel(Long id, String name) {
super();
this.id = id;
this.name = name;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
控制器
@Controller
公共类FooClientController
@GetMapping("/foos")
public String getFoos(Model modell) Windows
List<FooModel> foos = new ArrayList<>();
foos。 dd(新 FooModel(1L, "a"));
foos.add(new FooModel(2L, "b"));
foos. dd(新 FooModel(3L, "c"));
模型。 ddAttribute("foos", foos");
return "foos";
}
}
网页
<!DOCTYPE html>
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Spring OAuth Client Thymeleaf - 1</title>
<link rel="stylesheet"
href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css" />
</head>
<body>
<nav
class="navbar navbar-expand-lg navbar-light bg-light shadow-sm p-3 mb-5">
<a class="navbar-brand" th:href="@{/foos/}">Spring OAuth Client
Thymeleaf -1</a>
<ul class="navbar-nav ml-auto">
<li class="navbar-text">Hi, <span sec:authentication="name">preferred_username</span>
</li>
</ul>
</nav>
<div class="container">
<h1>All Foos:</h1>
<table class="table table-bordered table-striped">
<thead>
<tr>
<td>ID</td>
<td>Name</td>
</tr>
</thead>
<tbody>
<tr th:if="${foos.empty}">
<td colspan="4">No foos</td>
</tr>
<tr th:each="foo : ${foos}">
<td><span th:text="${foo.id}"> ID </span></td>
<td><span th:text="${foo.name}"> Name </span></td>
</tr>
</tbody>
</table>
</div>
</body>
</html>
:::注意事项
所有网页模板都应该放置在 资源/模板
下。
:::
第5步: 试试演示!
首先,您可以尝试打开您最喜欢的浏览器并直接访问 /foos
。 它将自动重定向到连锁店的登录页面。 您可以在这里或从根页面登录。
如果您访问了您的根页,
点击 登录
按钮,页面将重定向到下级登录页面。
登录后,页面将重定向到 /foos
。