Oauth2.0 用Spring-security-oauth2 非常简单

2024-06-11 07:38

本文主要是介绍Oauth2.0 用Spring-security-oauth2 非常简单,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

上周,我想开发OAuth 2.0的一个实例。我检查了Spring-security-Oauth2.0的样例,OAuth 2提供商sparklr2和OAuth 2客户端TONR 。我探索在互联网上了一下,整理相关文档。编译并运行了 OAuth 2提供商sparklr2和OAuth 2客户端TONR,并检查所有的授权上。现在,我在这里从实用的角度讲解的OAuth 2.0的不同方面来理解Spring-security-Oauth2.0


这篇文章是试图描述的OAuth 2.0以简化的形式来帮助开发商和服务提供商实施的协议。

我将涵盖以下主题在这篇文章中。

1 。实体
2 。创建应用程序
3 。授权, Grant-Type
                   a.
Web服务器应用程序(Web Server)
                   b.
基于浏览器的应用程序(Web Client)
                   c.
手机应用程序(Mobile APP)
                   d.其它桌面应用程序

4 。访问资源
5 。资源


OAuth2.0流程:


 


OAuth的服务器:
这也被称为OAuth的提供者。它的整体责任是验证和授权的用户/客户端和管理令牌。

第三方应用:
第三方应用程序俗称为客户端,将尝试获得访问用户的帐户。它需要从用户获得许可,才可以这样做。这可能是一个基于Web服务器的应用程序,基于浏览器的应用程序,桌面应用程序,手机/平板电脑应用程序或一些智能设备,如谷歌护目镜和智能电视。

资源服务器:
俗称为资源服务器的API ,从其中的数据会被提取出来或送达。这可能是SOAP或REST的基础服务提供商。

用户:
用户俗称为资源拥有者,谁可以访问访问资源。

创建应用程序:

在您开始OAuth的过程中,您必须先注册一个新的应用与服务/供应商。当注册一个新的应用程序,你通常注册基本信息,如应用程序克林特ID ,秘密,授权发放,类型等,另外,你必须注册一个重定向URI,用于将用户重定向到Web服务器,基于浏览器的,或移动应用程序。

重定向的URI :
该服务将只将用户重定向到注册的URI ,这有助于防止某些攻击。任何HTTP重定向的URI必须与SSL安全保护,因此该服务将只重定向到的URI以“https ”开头。这可以防止从令牌在授权过程中被截获。

客户端ID和授权密码:
注册您的应用程序后,你将拥有你的客户端ID和客户端
授权密码该客户端ID被认为是公共信息,并用于建立登录网址,或包括在一个页面上的Javascript源代码。客户端授权密码必须保密。如果部署的应用程序不能保守授权密码的机密,如JavaScript或本机应用程序,那么这个授权密码不被使用。

授权方式:

的OAuth 2的第一步骤是从用户获得授权。对于基于浏览器或移动应用程序,这通常是由显示给用户提供的服务的接口来实现的。

OAuth的2提供了不同的用例数批类型。定义的补助类型有:

 
一个Web服务器上运行的应用程序授权码
 
隐含的基于浏览器的或移动应用程序
 
密码与用户名和密码登录
 
对于应用程序访问客户端凭据

Web服务器应用程序
Web应用程序都写在一个服务器端语言和运行服务器的应用程序的源代码是不提供给公众。

授权请求:

http://localhost:8080/oauth2/oauth/authorize?response_type=code&client_id=easylocate&scope=read&redirect_uri=http://localhost:8080/web

之后接受访问。该页面将被重定向到重定向URI的授权码。

http://localhost:8080/web/?code=t7ol7D

现在是时候来交换授权码来获得访问令牌。

http://localhost:8080/oauth2/oauth/token?grant_type=authorization_code&code=t7ol7D&redirect_uri=http://localhost:8080/web&client_id=easylocate&client_secret=secret

与访问令牌的OAuth的服务器回复

 {
  
“ ACCESS_TOKEN ”:“ 372c3458 - 4067 - 4b0b - 8b77 - 7930f660d990 ”
  
“ token_type ” : “bearer” ,
  
“ refresh_token ” : “ ce23c924 - 3f28 - 456C - A112 - b5d02162f10c ”
  
“ expires_in ” : 37364 ,
  
“scope” : “read”
}

万一错了授权码,的Oauth服务器回复的错误。

 {
  
“error” : “ invalid_grant ” ,
  
“ error_description ” : “无效的授权码: t7olD ”
}

安全性:需要注意的是该服务应要求应用程序进行预注册的重定向的URI 。否则将有一个错配。

基于浏览器的应用程序和移动应用程序:
基于浏览器的应用程序在浏览器从网页加载的源代码之后运行完全。由于整个源代码是提供给浏览器,他们不能保持其客户端秘密的保密性,所以这个秘密是不是在这种情况下使用。

授权请求:

http://localhost:8080/oauth2/oauth/authorize?response_type=token&client_id=easylocate&redirect_uri=http://localhost:8080/web&scope=read

之后接受访问。该页面将被重定向到重定向URI与令牌。

http://localhost:8080/web/#access_token=372c3458-4067-4b0b-8b77-7930f660d990&token_type=bearer&expires_in=37026

就是这样,没有其他的步骤!在这一点上,一些JavaScript代码可以(在#后的部分)拉出访问令牌的片段,并开始进行API请求。

如果出现错误,你反而会收到一条错误的URI片段,如:

http://localhost:8080/web/#error=invalid_scope&error_description=Invalid+scope:+rea&scope=read+write

基于密码:
OAuth的2还提供了可用于令牌直接交换一个用户名和密码访问密码交付式。因为这显然需要的应用程序来收集用户的密码,它应该只用于由服务自身创建的应用程序。例如,原生Twitter的应用程序可以使用这笔款项型移动或桌面应用程序登录。

使用密码交付式,只是让类似下面的POST请求。我现在用的卷曲工具来演示POST请求。您可以使用任何其余客户端。

卷曲-I -X POST -D “的client_id = easylocate & grant_type =密码和用户名admin和密码=管理员& CLIENT_SECRET =秘密” http://localhost:8080/oauth2/oauth/token

服务器将返回与令牌

{
  
“ ACCESS_TOKEN ”:“ 4e56e9ec - 2f8e - 46b4 - 88b1 - 5d06847909ad ”

 “ token_type ” : “bearer” ,

  “ refresh_token ”:“ 7e14c979 - 7039 - 49d0 - 9c5d - 854efe7f5b38 ”
  
“ expires_in ” : 36133 ,
  
“scope” : “read,write"
}

客户端凭据基于:
基于客户端credentals授权用于服务器到服务器应用程序的访问。我只是表示使用卷曲工具的POST请求。

卷曲-I -X POST -D “的client_id = easylocate & grant_type = client_credentials & CLIENT_SECRET =秘密” http://localhost:8080/oauth2/oauth/token

服务器会回来的访问令牌
 {
  
“ ACCESS_TOKEN ”:“ 9cd23bef - ae56 - 46b0 - 82f5 - b9a8f78da569 ”
  
“ token_type ” : “bearer” ,
  
“ expires_in ” : 43199 ,
  “scope
” : “read”
}

访问的资源:

一旦您通过验证并获得访问令牌,可以提供访问令牌来访问受保护的资源。

这篇关于Oauth2.0 用Spring-security-oauth2 非常简单的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1050553

相关文章

SpringBoot使用Apache Tika检测敏感信息

《SpringBoot使用ApacheTika检测敏感信息》ApacheTika是一个功能强大的内容分析工具,它能够从多种文件格式中提取文本、元数据以及其他结构化信息,下面我们来看看如何使用Ap... 目录Tika 主要特性1. 多格式支持2. 自动文件类型检测3. 文本和元数据提取4. 支持 OCR(光学

Java内存泄漏问题的排查、优化与最佳实践

《Java内存泄漏问题的排查、优化与最佳实践》在Java开发中,内存泄漏是一个常见且令人头疼的问题,内存泄漏指的是程序在运行过程中,已经不再使用的对象没有被及时释放,从而导致内存占用不断增加,最终... 目录引言1. 什么是内存泄漏?常见的内存泄漏情况2. 如何排查 Java 中的内存泄漏?2.1 使用 J

JAVA系统中Spring Boot应用程序的配置文件application.yml使用详解

《JAVA系统中SpringBoot应用程序的配置文件application.yml使用详解》:本文主要介绍JAVA系统中SpringBoot应用程序的配置文件application.yml的... 目录文件路径文件内容解释1. Server 配置2. Spring 配置3. Logging 配置4. Ma

Java 字符数组转字符串的常用方法

《Java字符数组转字符串的常用方法》文章总结了在Java中将字符数组转换为字符串的几种常用方法,包括使用String构造函数、String.valueOf()方法、StringBuilder以及A... 目录1. 使用String构造函数1.1 基本转换方法1.2 注意事项2. 使用String.valu

java脚本使用不同版本jdk的说明介绍

《java脚本使用不同版本jdk的说明介绍》本文介绍了在Java中执行JavaScript脚本的几种方式,包括使用ScriptEngine、Nashorn和GraalVM,ScriptEngine适用... 目录Java脚本使用不同版本jdk的说明1.使用ScriptEngine执行javascript2.

Spring MVC如何设置响应

《SpringMVC如何设置响应》本文介绍了如何在Spring框架中设置响应,并通过不同的注解返回静态页面、HTML片段和JSON数据,此外,还讲解了如何设置响应的状态码和Header... 目录1. 返回静态页面1.1 Spring 默认扫描路径1.2 @RestController2. 返回 html2

Spring常见错误之Web嵌套对象校验失效解决办法

《Spring常见错误之Web嵌套对象校验失效解决办法》:本文主要介绍Spring常见错误之Web嵌套对象校验失效解决的相关资料,通过在Phone对象上添加@Valid注解,问题得以解决,需要的朋... 目录问题复现案例解析问题修正总结  问题复现当开发一个学籍管理系统时,我们会提供了一个 API 接口去

Java操作ElasticSearch的实例详解

《Java操作ElasticSearch的实例详解》Elasticsearch是一个分布式的搜索和分析引擎,广泛用于全文搜索、日志分析等场景,本文将介绍如何在Java应用中使用Elastics... 目录简介环境准备1. 安装 Elasticsearch2. 添加依赖连接 Elasticsearch1. 创

Spring核心思想之浅谈IoC容器与依赖倒置(DI)

《Spring核心思想之浅谈IoC容器与依赖倒置(DI)》文章介绍了Spring的IoC和DI机制,以及MyBatis的动态代理,通过注解和反射,Spring能够自动管理对象的创建和依赖注入,而MyB... 目录一、控制反转 IoC二、依赖倒置 DI1. 详细概念2. Spring 中 DI 的实现原理三、

SpringBoot 整合 Grizzly的过程

《SpringBoot整合Grizzly的过程》Grizzly是一个高性能的、异步的、非阻塞的HTTP服务器框架,它可以与SpringBoot一起提供比传统的Tomcat或Jet... 目录为什么选择 Grizzly?Spring Boot + Grizzly 整合的优势添加依赖自定义 Grizzly 作为