朋友不允许朋友写用户身份验证。 厌倦了管理自己的用户? 立即尝试Okta的API和Java SDK。 在几分钟之内即可对任何应用程序中的用户进行身份验证,管理和保护。
您是否曾与Spring Boot Actuator合作? 这是一个非常有用的库,可帮助您监视应用程序的运行状况以及与应用程序的交互-非常适合投入生产! Spring Boot Actuator包含一个内置端点,该端点用于跟踪对您的应用程序的HTTP调用-对于监视OpenID Connect(OIDC)请求非常有用-但不幸的是,默认实现不跟踪主体内容。 在这篇文章中,我将向您展示如何扩展httptrace端点以捕获内容并跟踪OIDC流。
让我们开始吧!
使用Spring Initializr和Okta创建一个OpenID Connect应用程序
您可以使用出色的Spring Initializr网站或API通过Okta集成创建示例OIDC应用程序:
curl https://start.spring.io/starter.zip \
dependencies==web,okta \
packageName==com.okta.developer.demo -d
但是,在运行OIDC应用程序之前,您将需要一个Okta帐户。 Okta是一项开发人员服务,可为您处理存储用户帐户和实施用户管理(包括OIDC)。 继续并注册一个免费的开发者帐户以继续。
登录到Okta帐户后,转到仪表板,然后转到“ 应用程序”部分。 添加一个新的Web应用程序,然后在“常规”部分中获取客户端凭据: 客户端ID和客户端密钥 。
您还将需要颁发者 ,它也是组织URL,您可以在仪表板主页的右上角找到它。 注意 :默认情况下,内置的Everyone
Okta组已分配给该应用程序,因此Okta组织中的任何用户都可以对其进行身份验证。
使用您的客户ID,客户密码。 然后在适当的位置发行人,通过在命令行中传递凭据来启动您的应用程序:
OKTA_OAUTH2_REDIRECTURI=/authorization-code/callback \
OKTA_OAUTH2_ISSUER=<issuer>/oauth2 \
OKTA_OAUTH2_CLIENT_ID=<client id> \
OKTA_OAUTH2_CLIENT_SECRET=<client secret> \
./mvnw spring-boot:run
将测试控制器添加到Spring Boot App
最好添加一个简单的控制器来测试身份验证流程。 默认情况下,仅允许经过身份验证的用户访问。
@Controller
@RequestMapping(value = "/hello")
public class HelloController {
@GetMapping(value = "/greeting")
@ResponseBody
public String getGreeting(Principal user) {
return "Good morning " + user.getName();
}
}
您可以通过重新启动应用程序并浏览到/ hello / greeting来进行测试 。
添加Spring Boot Actuator依赖关系
通过将启动器Maven依赖项添加到pom.xml file
来启用Spring Boot Actuator:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
要启用httptrace端点,请编辑src/main/resources/application.properties
并添加以下行:
management.endpoints.web.exposure.include=info,health,httptrace
您可以运行应用程序并浏览到/ hello / greeting并登录,以测试现成的执行器功能。
在自动配置下,Spring Security过滤器的优先级高于httptrace执行器添加的过滤器。
这意味着默认情况下仅跟踪经过身份验证的呼叫。 我们将在此处对此进行更改,但是现在,您可以在/ actuator / httptrace中看到跟踪的内容 。 响应应类似于以下JSON有效负载:
{
"traces":[
{
"timestamp":"2019-05-19T05:38:42.726Z",
"principal":{
"name":"***"
},
"session":{
"id":"***"
},
"request":{
"method":"GET",
"uri":"http://localhost:8080/",
"headers":{},
"remoteAddress":"0:0:0:0:0:0:0:1"
},
"response":{
"sta