首页 > 其他分享 >OAuth2.0

OAuth2.0

时间:2024-05-25 20:05:39浏览次数:13  
标签:令牌 用户 应用程序 访问 client 授权 OAuth2.0

OAuth2.0

      OAuth2.0是一种授权框架,用于授权第三方应用访问用户资源的方式。它允许用户将自己的信息(如照片、视频等)存储在一个服务提供商中,然后授权第三方应用访问这些信息,而无需提供用户名和密码给第三方应用。OAuth2.0通过向第三方应用提供访问令牌来实现这一目的,该访问令牌可以代表用户访问他们的资源。OAuth2.0还提供了与许多现有的授权和身份验证系统集成的机制,使第三方应用可以使用这些系统来验证用户身份。

OAuth2.0流程

       OAuth 2.0是一种授权框架,用于通过第三方应用程序访问用户在另一个应用程序(如微信)上存储的受保护资源。

  1. 用户点击微信图标发送认证请求:用户在第三方应用程序(例如一个网站或应用)中点击微信图标,请求使用微信账户进行认证。

  2. 用户输入账户和密码:用户在弹出的微信登录页面中输入自己的微信账户和密码。

  3. 认证请求发送至微信服务器:第三方应用程序将用户输入的账户和密码等认证请求发送至微信服务器进行认证。

  4. 认证成功返回令牌:如果认证成功,微信服务器将返回一个令牌(access token)给第三方应用程序。

  5. 使用令牌获取用户信息:第三方应用程序可以使用令牌去微信服务器请求用户的头像、名字、性别等信息。

  6. 令牌验证:第三方应用程序将令牌再次发送至微信服务器进行验证,以确保令牌的有效性。

  7. 返回用户信息:如果令牌验证成功,微信服务器将返回用户的头像、名字、性别等信息给第三方应用程序。

  8. 与系统账户绑定:第三方应用程序可以将获取到的用户信息与其自己的系统账户进行绑定,以便后续的操作和个性化推荐等功能。

示例

步骤一:添加依赖 在你的pom.xml文件中添加以下依赖,以引入Spring Security和OAuth2的相关库:

<dependencies>
    <!-- Spring Security -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-security</artifactId>
    </dependency>

    <!-- OAuth2 -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-oauth2-client</artifactId>
    </dependency>

    <!-- OAuth2 JWT -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-oauth2-resource-server</artifactId>
    </dependency>
</dependencies>

步骤二:配置Spring Security 在你的application.properties或application.yml文件中,添加以下配置:

spring.security.oauth2.client.registration.[client-id].client-id=[client-id]
spring.security.oauth2.client.registration.[client-id].client-secret=[client-secret]
spring.security.oauth2.client.registration.[client-id].authorization-grant-type=authorization_code
spring.security.oauth2.client.registration.[client-id].redirect-uri=http://localhost:8080/login/oauth2/code/[client-id]
spring.security.oauth2.client.provider.[provider-name].authorization-uri=[authorization-uri]
spring.security.oauth2.client.provider.[provider-name].token-uri=[token-uri]
spring.security.oauth2.client.provider.[provider-name].user-info-uri=[user-info-uri]
spring.security.oauth2.client.provider.[provider-name].user-name-attribute=[user-name-attribute]

其中,[client-id]是你从提供商那里获得的客户端ID,[client-secret]是客户端密码,[provider-name]是提供商名称,[authorization-uri]是用于获取授权码的URI,[token-uri]是用于换取访问令牌的URI,[user-info-uri]是用于获取用户信息的URI,[user-name-attribute]是用户信息中的用户名属性。

步骤三:实现登录页面 创建一个登录页面,让用户以OAuth2提供商的身份登录,并授权访问你的应用程序。你可以使用Spring Security提供的默认登录页面,或者自定义一个登录页面。

步骤四:实现回调处理 在你的回调处理方法中,获取授权码和访问令牌,并将其存储在你的应用程序中。

@Controller
public class OAuth2LoginController {
    @Autowired
    private OAuth2AuthorizedClientService authorizedClientService;

    @GetMapping("/login/oauth2/code/{client-id}")
    public String handleCallback(@RequestParam("code") String code,
                                 @RequestParam("state") String state,
                                 OAuth2AuthenticationToken authenticationToken) {

        OAuth2AuthorizedClient authorizedClient =
                ((OAuth2AuthenticationToken) authentication)
                        .getAuthorizedClient();

        // 获取访问令牌
        String accessToken = authorizedClient.getAccessToken().getTokenValue();

        // 存储访问令牌
        // ...

        return "redirect:/";
    }
}

步骤五:保护资源 使用Spring Security来保护你的资源,确保只有授权的用户才能访问。

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests()
                .antMatchers("/").permitAll()
                .antMatchers("/api/**").authenticated()
                .and()
                .oauth2Login();
    }
}

     

总结

     OAuth2.0是一种授权框架,用于在不共享用户凭证的情况下,允许应用程序访问用户的资源。它提供了一种安全的、标准化的方式,允许用户授权第三方应用程序访问他们的资源,并且可以由用户随时撤销该访问权限。

OAuth2.0涉及以下几个主要角色:

  1. 资源拥有者(Resource Owner):用户拥有资源的所有者,可以授权第三方应用程序访问他们的资源。

  2. 客户端(Client):第三方应用程序,需要访问资源拥有者的资源。

  3. 授权服务器(Authorization Server):验证资源拥有者的身份,并颁发访问令牌给客户端。

  4. 资源服务器(Resource Server):存储和管理资源的服务器,可以根据访问令牌来控制资源的访问权限。

OAuth2.0的授权流程包括以下几个步骤:

  1. 客户端向授权服务器发送请求,请求授权访问某个资源。

  2. 授权服务器验证客户端的身份,并向客户端返回一个授权码。

  3. 客户端使用授权码向授权服务器请求访问令牌。

  4. 授权服务器验证授权码,并向客户端返回访问令牌。

  5. 客户端使用访问令牌向资源服务器请求访问资源。

  6. 资源服务器验证访问令牌,并向客户端返回资源。

OAuth2.0的主要优点是安全性和灵活性。它通过使用访问令牌来代替用户凭证,减少了第三方应用程序访问用户敏感信息的风险。同时,OAuth2.0还支持多种授权流程和多种身份验证方式,可以适应不同的应用场景和安全需求。

然而,OAuth2.0也存在一些安全风险,例如令牌劫持和跨站请求伪造(CSRF)攻击。为了减少这些风险,开发者需要采取一些额外的安全措施,如使用HTTPS协议传输令牌和实施严格的访问令牌验证机制。

标签:令牌,用户,应用程序,访问,client,授权,OAuth2.0
From: https://blog.csdn.net/Flying_Fish_roe/article/details/139043844

相关文章

  • Gitlab接入Oauth2.0
    配置Gitlab的SSO接入文档OmniAuthOauth2.0添加Gitlab配置里面包含的JWT配置后续再添加样例,可以忽略gitlab_rails['omniauth_enabled']=true#启用SSO配置gitlab_rails['omniauth_auto_link_user']=["oauth2_generic"]#自动关联已经存在的账号gitlab_rails[......
  • OAuth2.0实战使用JWT令牌认证
    JWT分为三部分:头部、载荷、签名。如下:eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOlsicmVzMSJdLCJ1c2VyX25hbWUiOiJhZG1pbiIsInNjb3BlIjpbImFsbCJdLCJleHAiOjE3MDU5OTQ0MzgsImF1dGhvcml0aWVzIjpbIlJPTEVfYWRtaW4iXSwianRpIjoiM2RiYjVkNGUtN2Q3My00ODI3LTlkOGYtMmI3OGVmMmVmZTE......
  • OAuth2.0详细介绍与实践
    一、OAuth2.0介绍1.1概述OAUTH协议为用户资源的授权提供了一个安全的、开放而又简易的标准。与以往的授权方式不同之处是OAUTH的授权不会使第三方触及到用户的帐号信息(如用户名与密码),即第三方无需使用用户的用户名与密码就可以申请获得该用户资源的授权,因此OAUTH是安全的。oAuth......
  • OAuth2.0授权
    OAuth2.0OAuth2.0是一个开放标准,允许用户授权第三方应用程序访问他们存储在另外的服务器上的信息,而不需要将用户名和密码提供给第三方应用或分享他们数据的所有内容。OAuth2.0协议的认证流程,简单理解,就是允许我们将之前的授权和认证过程交给一个独立的第三方进行担保。OAuth2.0协议......
  • identityserver,OAuth2.0,JWT之间的关系
    OAuth2.0是一种授权框架,用于应用程序之间安全的共享用户资源,它允许用户授权第三方应用程序访问他们的资源,列如照片,视频,联系人列表等,而不必将用户名和密码提供给第三方应用程序,OAuth2.0通过令牌来代表用户授权,这些令牌可以被第三方应用程序用于访问用户资源,而不必知道用户的凭据。O......
  • 在net core 6中如何配置oauth2.0
    在.NETCore6中配置OAuth2.0可以通过使用Microsoft.AspNetCore.Authentication.OAuth包来实现。以下是一个简单的示例,演示了如何在.NETCore6中配置OAuth2.0来与GitHub进行集成:首先,安装Microsoft.AspNetCore.Authentication.OAuth包:```bashdotnetaddpackageMicrosoft.AspN......
  • 【11.0】Fastapi的OAuth2.0的授权模式
    【一】OAuth2.0的授权模式授权码授权模式(AuthorizationCodeGrant)隐式授权模式(ImplicitGrant)密码授权模式(ResourceOwnerPasswordCredentialsGrant)客户端凭证授权模式(ClientCredentialsGrant)【二】密码授权模式【1】FastAPI的OAuth2PasswordBearer说明......
  • Oauth2.0授权码模式
    参考:https://blog.csdn.net/qq15035899256/article/details/129541483授权码模式这种模式是最安全的一种模式,也是推荐使用的一种,比如我们手机上的很多App都是使用的这种模式。相比隐式授权模式,它并不会直接返回Token,而是返回授权码,真正的Token是通过应用服务器访问验证服......
  • 单点登录场景中的CAS协议和OAuth2.0协议对比
    相信关注过CAS和OAuth2.0协议的朋友们,都有大概的了解,简单描述两个协议的主要区别,网上的伙伴们通常会说:CAS单点登录时,保护客户端资源OAuth2.0是保护服务端资源安全而对于单点登录场景来说,无论是保护客户端资源,还是保护服务端资源,最终都是完成认证中心的认证,使访问的资源......
  • 通过 Keycloak 结合 OAuth2.0协议进行 Amazon API Gateway 鉴权
    1.简介本文介绍了如何通过Keycloak,并结合AmazonAPIGateway内置的授权功能,完成对Amazon资源请求的鉴权过程。APIGateway帮助开发者安全的的创建、发布、维护并管理API的访问。在中国区,由于Cognito仍未上线,因此使用Keycloak作为API调用的鉴权服务,具有重要的实际意......