,基于JWT和OAuth2.0应用接入第三方统一认证服务

简介: 一套应用服务,有自己的独立登录接口,独立认证服务(JWT认证),独立用户等,需要接入第三方的统一认证系统,实现用户统一登录;

需求描述:

一套应用服务,有自己的独立登录接口,独立认证服务(JWT认证),独立用户等,需要接入第三方的统一认证系统,实现用户统一登录;

需求分析:

实现统一用户和单点登录,需要是:

  • 首先用户同步,用户数量小,可以通过手动新建,然后和统一用户关联的方式;

    > 对于只有统一登录,不需要统一用户的,需要自动新建用户或关联已有用户
    
    • 其次是统一登录页面:可以保留自有登录页面,通过不同接口跳转到统一登录页面做验证;
  • jwt方式不提供统一登出服务;

需求实现说明

  1. 用户同步:先手动新建,或在登录时自动新建,或先同步用户信息;
  2. 提供登陆接口:在应用中提供一个新的登录接口(restful接口),跳转的统一登录页,在跳转过程中提供必要参数;
  3. 统一登录回调: 在应用中提供一个统一登录后的回调接口,用于验证是否登录成功;
  4. 生成应用JWT:在统一登录结果验证成功后,则生成应用中的jwt,放置到Cookie中,跳转到应用页面;
  5. 验证jwt: 在应用页面中验证jwt,jwt是应用生成,是可用的;

代码实现:

  • 用户同步:可用手动新建测试;
  • 提供登录跳转接口:

    Oauth2.0认证服务一般会提供一个登录地址:传递以下参数:

    一个登陆成功的回调地址redirectUri
    一个原值返回的参数state,一般会填写登录后的跳转页面
    统一认证系统应用的id和secret

以下代码提供了一个登录接口,跳转的统一登录页面,并携带指定参数;

public void login(HttpServletRequest request, HttpServletResponse response,String redirect_uri) {
        String contextPath = request.getContextPath();
        String redirectUri = serverUri + contextPath + "/api/authsuccess";
        //->/api/authsuccess是应用提供的验证地址
        logger.info("认证成功之后调转到目标地址为:redirectUri:{}", redirectUri);
        String url = UriComponentsBuilder.fromUriString(authorizeUrl).queryParam("app_id", clientId)
                    .queryParam("app_secret", clientSecret).queryParam("state", redirect_uri)
                    .queryParam("redirect_uri", redirectUri).build().encode().toUriString();
        response.sendRedirect(url);
        
    }
  • 在统一登录页面,用户输入用户名密码登录,通过成功后,回调应用上一步登录验证接口;
    用户登录成功,统一认证服务会保存应用系统的Session,在下次通过应用跳转其他系统时,会获取到这个session判断是否登录,若已登录,在不会出现登录窗口

    Oauth2.0一般情况下,会返回一个code给应用;
    应用接收code,通过统一登录接口,获取登录用户ID
    应用获取登录用户ID,生成JWTtoken
    将jwt_token放置到cookie中,跳转的指定页面
// state为上一步传递的参数
public void authenticate(HttpServletRequest request, HttpServletResponse response, String code,
            String state) {
    
        Map<String, Object> userInfo = getUserInfo(code); //获取用户信息
        String userId = (String) userInfo.get("username");
  
        String _jwt = generateToken(userId);
        String jwt_iss = (System.currentTimeMillis()/ 1000) + "";
        String jwt_expire = (30 * 1000) + "";
        Cookie jwt_cookie = new Cookie("_jwt", jwt);
        Cookie jwtActiveCookie = new Cookie("_jwt_active", jwt_iss );
        Cookie jwtExpireTimeCookie = new Cookie("_jwt_exp", jwt_expire );
        jwtCookie.setPath("/");
        jwtActiveCookie.setPath("/");
        jwtExpireTimeCookie.setPath("/");
        response.addCookie(jwtCookie);
        response.addCookie(jwtActiveCookie);
        response.addCookie(jwtExpireTimeCookie);
        response.sendRedirect(state);
}
  • 跳转后的页面为应用页面,在调用应用接口时,会验证jwt是否有效

接入完成;

其他接入方式,可能接口不同,但是流程应该大致相似;
在这里插入图片描述

相关文章
|
4月前
|
SQL Java 测试技术
在Spring boot中 使用JWT和过滤器实现登录认证
在Spring boot中 使用JWT和过滤器实现登录认证
270 0
|
2月前
|
JSON 安全 数据安全/隐私保护
Python认证新风尚:OAuth遇上JWT,安全界的时尚Icon👗
【10月更文挑战第2天】在当今互联网世界中,数据安全与隐私保护日益重要。Python 作为广泛应用于 Web 开发的语言,其认证机制也不断进化。OAuth 2.0 和 JSON Web Tokens (JWT) 成为当前最热门的安全认证方案,不仅保障数据安全传输,还简化了用户认证流程。本文将介绍 Python 如何结合 OAuth 2.0 和 JWT 打造安全高效的认证体系。
41 3
|
4月前
|
存储 JSON 安全
从入门到精通:Python中的OAuth与JWT,打造无懈可击的认证体系🔒
【8月更文挑战第4天】构建现代Web和移动应用时,用户认证与授权至关重要。Python集成OAuth和JWT技术,能轻松实现安全认证。本文从OAuth基础入手,介绍如何使用`requests-oauthlib`库简化流程,再到JWT进阶应用,利用`PyJWT`库生成及验证令牌。最后,探讨如何结合两者,创建无缝认证体验。通过代码示例,由浅入深地引导读者掌握构建坚固应用认证体系的方法。
108 2
|
26天前
|
JSON 安全 算法
Spring Boot 应用如何实现 JWT 认证?
Spring Boot 应用如何实现 JWT 认证?
60 8
|
1月前
|
JSON 安全 数据安全/隐私保护
Python认证新风尚:OAuth遇上JWT,安全界的时尚Icon👗
在当今互联网世界中,数据安全和隐私保护至关重要。Python 作为 Web 开发的主流语言,其认证机制也在不断进步。OAuth 2.0 和 JSON Web Tokens (JWT) 是当前最热门的安全认证方案,不仅保障数据安全传输,还简化用户认证流程。本文介绍如何在 Python 中结合 OAuth 2.0 和 JWT,打造一套既安全又高效的认证体系。通过 Flask-HTTPAuth 和 PyJWT 等库,实现授权和验证功能,确保每次请求的安全性和便捷性。
40 3
|
1月前
|
JSON 算法 安全
JWT Bearer 认证在 .NET Core 中的应用
【10月更文挑战第30天】JWT(JSON Web Token)是一种开放标准,用于在各方之间安全传输信息。它由头部、载荷和签名三部分组成,用于在用户和服务器之间传递声明。JWT Bearer 认证是一种基于令牌的认证方式,客户端在请求头中包含 JWT 令牌,服务器验证令牌的有效性后授权用户访问资源。在 .NET Core 中,通过安装 `Microsoft.AspNetCore.Authentication.JwtBearer` 包并配置认证服务,可以实现 JWT Bearer 认证。具体步骤包括安装 NuGet 包、配置认证服务、启用认证中间件、生成 JWT 令牌以及在控制器中使用认证信息
|
3月前
|
安全 Java 数据安全/隐私保护
|
3月前
|
JSON 安全 数据库
Python安全性大升级:OAuth与JWT,让你的应用穿上防弹衣🛡️
【9月更文挑战第6天】在数字世界中,每个应用都面临着安全威胁。作为Python开发者,构建强大的系统至关重要。OAuth和JWT为我们提供了坚实的安全保障。OAuth作为一种授权机制,让用户无需向第三方应用暴露敏感信息;JWT则通过自包含的信息传输,增强了安全性并提高了系统性能。利用Python生态中的这些工具,我们可以更好地保护用户数据,守护他们的信任与期待。下面是一个使用PyJWT生成和验证JWT的示例代码:(示例代码同上)通过这些技术,我们的应用能够更加稳健地在数字海洋中航行。
37 3
|
3月前
|
JSON 安全 数据安全/隐私保护
Python 安全性大揭秘:OAuth 与 JWT,不只是认证,更是信任的传递
【9月更文挑战第4天】在数字化时代,确保应用安全至关重要。Python 作为广泛使用的编程语言,提供了强大的安全认证工具,如 OAuth 和 JWT。OAuth 是一种授权框架,允许第三方应用在有限权限下访问用户资源;JWT 则是一种自包含的数据传输格式,用于安全地传递声明。通过合理配置和使用这些技术,可以有效提升应用安全性,保障用户数据安全。正确管理和定期更新密钥、严格测试 JWT 的生成与验证等最佳实践,对于构建安全可靠的应用至关重要。不断学习新威胁,是维护应用安全的永恒课题。
57 2
|
4月前
|
JSON 安全 数据安全/隐私保护
Python 安全性大揭秘:OAuth 与 JWT,不只是认证,更是信任的传递
【8月更文挑战第6天】在数字化时代,Python 通过 OAuth 和 JWT 筑牢应用安全防线。OAuth 是一种授权框架,允许第三方应用在用户授权下安全访问资源;JWT 则是一种自包含的声明传输格式,确保通信安全。两者结合使用,能有效进行身份验证及授权管理。然而,密钥管理和 JWT 有效期设置等仍是挑战,需谨慎处理以保障整体安全性。正确配置这些工具和技术,可为用户提供既安全又便捷的服务体验。
47 7

热门文章

最新文章

下一篇
DataWorks