精华内容
下载资源
问答
  • 2021-03-08 21:27:06

    #文档说明

    这是基于OAuth2,用java封装了qq、新浪微博、微信的第三方登录的接口

    进一步交流请加QQ群:386233861

    #架构

    com.shamrock.oauth.api.entity =>第三方登录后用户信息实体

    com.shamrock.oauth.api.httpclient =>采用httpcient封装网络层,有一个彩蛋哦,这里可以用于爬虫,非常方便

    com.shamrock.oauth.api.service => 对qq、新浪微博、微信第三方登录的接口定义和封装

    com.shamrock.oauth.util =>读取配置文件和json的解析

    conf =>配置文件

    lib => 所需jar包

    #示例

    package com.shamrock.oauth.api.service;

    public class Main {

    public static void main(String[] args) {

    OAuthApiService qq = new QQOAuthApi();

    //qq登录授权

    System.out.println(qq.authorize());

    //授权后获取用户信息

    //qq.getUser(code);

    OAuthApiService sina = new SinaWeiboOAuthApi();

    //新浪微博登录授权

    System.out.println(sina.authorize());

    //授权后获取用户信息

    //sina.getUser(code);

    OAuthApiService weixin = new WeiXinOAuthApi();

    //微信登录授权

    System.out.println(weixin.authorize());

    //授权后获取用户信息

    //weixin.getUser(code);

    }

    }

    更多相关内容
  • java实现OAuth2流程

    2018-04-24 16:36:02
    还在烦恼OAuth2技术只依赖boot吗?我提供了纯java技术实现OAuth2的全部实现,含客户端和服务端的完整解决方案。
  • Oauth2实现java

    2018-07-01 12:28:48
    oauth本身不是技术,而是一项资源授权协议,重点是协议!Apache基金会提供了针对Java的oauth封装。我们做Java web项目想要实现oauth协议进行资源授权访问,直接使用该封装就可以。
  • Javaoauth2.0 服务端与客户端的实现.zip 封装了oauth2.0的基本架构和实现,对照我的博客http://blog.csdn.net/jing12062011/article/details/78147306使用该源码。 下载项目压缩包,解压,里面两个maven项目:...
  • 基于MAVEN+OLTU开源代码实现javaOauth2.0前后端,数据加密使用MD5。
  • Javaoauth2.0 服务端与客户端的实现源码下载,里面两个maven项目:oauthserver和oauthclient01。
  • Javaoauth2.0 服务端与客户端的实现.
  • oauth2密码模式java

    2018-12-12 15:38:49
    oauth2密码模式的java版本,服务端和客户端,希望能帮助到大家
  • 本文主要向大家介绍了java语言的3行代码快速实现Spring Boot Oauth2服务功能,通过具体的实例让大家了解,希望对大家学习java语言有所帮助。项目地址https://github.com/jeesun/oauthserveroauthserver简介oauth...

    本文主要向大家介绍了java语言的3行代码快速实现Spring Boot Oauth2服务功能,通过具体的实例让大家了解,希望对大家学习java语言有所帮助。

    项目地址https://github.com/jeesun/oauthserver

    oauthserver

    简介

    oauthserver是一个基于Spring Boot Oauth2的完整的独立的Oauth服务器。仅仅需要创建相关数据表,修改数据库的连接信息,你就可以得到一个Oauth服务器。

    支持的关系型数据库:

    PostgreSQL

    MySQL

    已实现的功能:

    集成Spring Boot Oauth2,实现Oauth服务;

    token保存到关系型数据库;

    日志记录保存到文件,并按日归档;

    数据库连接信息加密;

    集成Druid数据库连接池。

    使用流程

    1. 建表

    PostgreSQL

    请执行src/main/resources/schema-pg.sql,完成数据表的创建和测试数据的导入。

    MySQL

    请执行src/main/resources/schema-mysql.sql,完成数据表的创建和测试数据的导入。

    2. 修改数据库连接信息

    在application.yml中,配置着数据库的连接信息。其中,配置项username和password是要经过jasypt加密的,不能直接填明文。加密密钥由jasypt.encryptor.password配置。你需要使用test目录下的UtilTests工具得到加密字符串。

    PostgreSQL

    # PostgreSQL连接信息

    driver-class-name: org.postgresql.Driver

    url: jdbc:postgresql://127.0.0.1:5432/thymelte?useUnicode=true&characterEncoding=UTF-8

    username: ENC(hTpbG9fq+7P3SntmXuNtDxbtWDqRuPV+)

    password: ENC(abdq6LyOspryFQHCqzEMTxRozyJVjIA4)

    MySQL

    # MySQL连接信息

    driver-class-name: com.mysql.jdbc.Driver

    url: jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf-8&useSSL=false

    username: ENC(YiYjVwTulDGN//YaB3KbuA==)

    password: ENC(9oaIJkFgGSDFaHH3OXY63RHWQ+amDmiJ)

    复制代码

    3. 运行

    现在,一切已准备就绪。运行项目,当程序成功启动时,即表明你已配置成功。

    4. 测试

    在建表时,我已经向表添加了测试数据。以下请求参数的值,均是测试数据,在数据表中可以找得到。请根据需求到数据表中修改对应的值。

    在表oauth_client_details表中,已有一条测试数据。列client_id和client_secret的值,分别对应Basic Oauth的请求参数username和password的值。而列access_token_validity和列refresh_token_validity,分别代表access_token和refresh_token的有效期时间,以秒为单位。测试数据7200和5184000,分别代表2个小时和2个月(60天)。这是一个比较合理的有效期时间的设置,可以参考。

    token相关的接口,都需要进行Basic Oauth认证。

    1、根据用户名和密码获取access_token

    POST http://localhost:8182/oauth/token?grant_type=password&username=jeesun&password=1234567890c

    成功示例:

    {

    "access_token": "ca582cd1-be6c-4a5a-82ec-10af7a8e06eb",

    "token_type": "bearer",

    "refresh_token": "c24a6143-97c8-4642-88b9-d5c5b902b487",

    "expires_in": 3824,

    "scope": "read write trust"

    }

    复制代码

    失败示例(用户名或者密码错误)

    {

    "error": "invalid_grant",

    "error_description": "Bad credentials"

    }

    复制代码

    2、检查access_token

    GET http://localhost:8182/oauth/check_token?token=ca582cd1-be6c-4a5a-82ec-10af7a8e06eb

    成功示例

    {

    "aud": [

    "oauth2-resource"

    ],

    "exp": 1524507296,

    "user_name": "jeesun",

    "authorities": [

    "ROLE_ADMIN",

    "ROLE_USER"

    ],

    "client_id": "clientIdPassword",

    "scope": [

    "read",

    "write",

    "trust"

    ]

    }

    复制代码

    失败示例(access_token已过期)

    {

    "error": "invalid_token",

    "error_description": "Token was not recognised"

    }

    复制代码

    3、根据refresh_token获取新的access_token

    POST http://localhost:8182/oauth/token?grant_type=refresh_token&refresh_token=c24a6143-97c8-4642-88b9-d5c5b902b487

    成功示例

    {

    "access_token": "690ecd7d-f2b7-4faa-ac45-5b7a319478e8",

    "token_type": "bearer",

    "refresh_token": "c24a6143-97c8-4642-88b9-d5c5b902b487",

    "expires_in": 7199,

    "scope": "read write trust"

    }

    复制代码

    app实践指南

    app获取到token信息后,需要保存token信息和请求时间。在传access_token之前,需要检查access_token是否过期。为了减少后台压力,检查access_token是否过期应该是在app本地完成。通过token的keyexpires_in(剩余有效期)的值,以及本地记录的请求时间,和当前时间做对比,可以很方便地判断出access_token是否过期。如果过期了,需要通过refresh_token获取新的access_token。因为access_token的有效期只有2个小时,这个验证是必须的。refresh_token同理。

    希望这篇文章可以帮助到你,总之同学们,IT资讯尽在职坐标。

    展开全文
  • 主要介绍了使用Java开发实现OAuth安全认证的应用的方法,OAuth安全认证经常出现于社交网络API应用的相关开发中,需要的朋友可以参考下
  • 微博Oauth2.0 协议,用java 实现单点登录获取用户信息。
  • Java实现OAuth2.0授权码方式前面介绍了OAuth2.0和授权方式,可以参考以下文章:简单认识OAuth2.0OAuth2.0授权方式今天就用Java来验证OAuth2.0授权方式的授权码式,我们Spring Cloud的OAuth来实现认证和资源服务器,...

    ef97241ad3a8525be35a8c13cbed15d6.pngJava实现OAuth2.0授权码方式

    前面介绍了OAuth2.0和授权方式,可以参考以下文章:

    简单认识OAuth2.0

    OAuth2.0授权方式

    今天就用Java来验证OAuth2.0授权方式的授权码式,我们Spring Cloud的OAuth来实现认证和资源服务器,以下是Web Security的配置。

    cdd07aa5cb94d2c07253968a08c9b5b7.pngWeb Security的配置

    我们另外要实现一个认证服务器,其实很简单我们做个配置类,继承AuthorizationServerConfigurerAdapter类,并添加注解EnableAuthorizationServer,我们配置四种认证方式,一个认证服务器基本完成,以下是具体代码:

    16736035886e3b64b54f98f69dc0a6a8.png认证服务器

    我们再配置个资源服务器,就是我们的应用服务,这个很简单了,一个spirngboot的web项目,在配置文件中需要配置token信息的地址:

    3c3173c0940f99ec6f0014d59109c792.pngsecurity的配置

    我们的一个测试Controller,配置一个路径/info

    3ad044250a596fe61aaed69750c37e74.pngcontroller

    我们的认证服务器监听8080端口,资源服务器监听8082端口,下面就验证授权模式。

    获取授权码

    在浏览器中输入以下地址,页面会跳转到登录页面,用户名和密码是我们在代码中设置的java/java。

    e925fe14b70b7598e9f5d6a4409ed8f3.png输入浏览器的地址

    48e2623d6feb423fb0a108cca145b641.png登录页面

    登录后,系统会跳转到授权页面,见面如下:

    ab186fc2ae289879dd77cbf2bcdad994.png授权

    授权后会跳转到设置的跳转页面并且带有code=XXXX,这个后面的code的值就是我们需要的认证码,我们下面就用这个认证码获取token。

    e0fb25578eac1f2786166b1c4d9e1a76.png获取认证码

    获取token

    现在就往认证服务器发送一个post请求,带上我们的授权码,用上文介绍的httpClient(是时候用idea的httpclient功能了)发送请求,具体如下:

    014e80d7f77d4edb8d58dd78ac8ef1b9.png获取token

    发送请求后,下面就是我们获取到的access token和refresh token。

    b6dd7659f6256a1a461ec81efddc7c1f.png获取到的token

    获取资源

    我们用httpClinet发送一个get请求,带上我们的token,添加Authorization头信息,值为Bearer+token。

    944ae9d04309fb88e1421bff66620976.png获取资源

    这个请求返回一个认证信息,具体如下:

    ad4281d3ece485138db17fe8229400db.png认证信息

    展开全文
  • Oauth2 for SpringSecurity 认证方式的实现 有关springsecrity部分请查看项目案例: springsecurity oauth2认证部分->认证信息数据库存储 执行sql 脚本、部署项目 一、获取 access_token {"access_token":"4a5fc354-...
  • OAuth2 OAuth 2 授权服务器。 它支持以下 OAuth2 授权流程: 隐式授予,客户端凭据授予 它支持以下访问令牌类型: 不记名令牌、MAC令牌(即将推出)
  • 适用于 JavaOauth2 提供程序库 该库提供了一个工具包,用于向 Java Web 应用程序添加 OAuth2 提供程序功能。 该库被设计为可与 play 框架、基于 servlet 的 Web 框架一起使用。 该库目前处于测试阶段。 支持的...
  • DeviantArt-OAuth2-Java DeviantArt 的 OAuth2 API v1.20150217 的开源 Java 实现。 这个实现目前是不完整的。 查看问题页面以查看尚未完成的内容。 您可以从 json.org 下载 JSON 库。
  • oauth2授权码方式

    2018-12-12 15:29:58
    授权码方式java的服务端和客户端,下载了直接放到tomcat里就能跑起来。
  • 我们做Java web项目想要实现oauth协议进行资源授权访问,直接使用该封装就可以。image.png整个开发流程简述一下:1、 在客户端web项目中构造一个oauth的客户端请求对象(OAuthClientRequest),在此对象中携带客户端...

    oauth原理简述

    oauth本身不是技术,而是一项资源授权协议,重点是协议!Apache基金会提供了针对Java的oauth封装。我们做Java web项目想要实现oauth协议进行资源授权访问,直接使用该封装就可以。

    71900b5919b9

    image.png

    整个开发流程简述一下:

    1、 在客户端web项目中构造一个oauth的客户端请求对象(OAuthClientRequest),在此对象中携带客户端信息(clientId、accessTokenUrl、response_type、redirectUrl),将此信息放入http请求中,重定向到服务端。此步骤对应上图1

    2、 在服务端web项目中接受第一步传过来的request,从中获取客户端信息,可以自行验证信息的可靠性。同时构造一个oauth的code授权许可对象(OAuthAuthorizationResponseBuilder),并在其中设置授权码code,将此对象传回客户端。此步骤对应上图2

    3、 在在客户端web项目中接受第二步的请求request,从中获得code。同时构造一个oauth的客户端请求对象(OAuthClientRequest),此次在此对象中不仅要携带客户端信息(clientId、accessTokenUrl、clientSecret、GrantType、redirectUrl),还要携带接受到的code。再构造一个客户端请求工具对象(oAuthClient),这个工具封装了httpclient,用此对象将这些信息以post(一定要设置成post)的方式请求到服务端,目的是为了让服务端返回资源访问令牌。此步骤对应上图3。(另外oAuthClient请求服务端以后,会自行接受服务端的响应信息。

    4、 在服务端web项目中接受第三步传过来的request,从中获取客户端信息和code,并自行验证。再按照自己项目的要求生成访问令牌(accesstoken),同时构造一个oauth响应对象(OAuthASResponse),携带生成的访问指令(accesstoken),返回给第三步中客户端的oAuthClient。oAuthClient接受响应之后获取accesstoken,此步骤对应上图4

    5、 此时客户端web项目中已经有了从服务端返回过来的accesstoken,那么在客户端构造一个服务端资源请求对象(OAuthBearerClientRequest),在此对象中设置服务端资源请求URI,并携带上accesstoken。再构造一个客户端请求工具对象(oAuthClient),用此对象去服务端靠accesstoken换取资源。此步骤对应上图5

    6、 在服务端web项目中接受第五步传过来的request,从中获取accesstoken并自行验证。之后就可以将客户端请求的资源返回给客户端了。

    代码:

    客户端:

    一、pom依赖:

    org.apache.oltu.oauth2

    org.apache.oltu.oauth2.client

    0.31

    二、controller方法:

    2.1 向服务端请求授权码code的controller方法:

    @RequestMapping("/server")

    @Controller

    public class ServerController{

    String clientId = null;

    String clientSecret = null;

    String accessTokenUrl = null;

    String userInfoUrl = null;

    String redirectUrl = null;

    String response_type = null;

    String code= null;

    //提交申请code的请求

    @RequestMapping("/requestServerCode")

    public String requestServerFirst(HttpServletRequestrequest, HttpServletResponseresponse, RedirectAttributesattr) throws OAuthProblemException{

    clientId = "clientId";

    clientSecret = "clientSecret";

    accessTokenUrl = "responseCode";

    redirectUrl = "http://localhost:8081/oauthclient01/server/callbackCode";

    response_type = "code";

    OAuthClient oAuthClient =new OAuthClient(new URLConnectionClient());

    String requestUrl = null;

    try {

    //构建oauthd的请求。设置请求服务地址(accessTokenUrl)、clientId、response_type、redirectUrl

    OAuthClientRequest accessTokenRequest = OAuthClientRequest

    .authorizationLocation(accessTokenUrl)

    .setResponseType(response_type)

    .setClientId(clientId)

    .setRedirectURI(redirectUrl)

    .buildQueryMessage();

    requestUrl = accessTokenRequest.getLocationUri();

    System.out.println(requestUrl);

    } catch (OAuthSystemExceptione) {

    e.printStackTrace();

    }

    return "redirect:http://localhost:8082/oauthserver/"+requestUrl ;

    }

    此段代码对应开发步骤1.其中accessTokenUrl是服务端返回code的controller方法映射地址。redirectUrl是告诉服务端,code要传回客户端的一个controller方法,该方法的映射地址就是redirectUrl。

    2.2 向服务端请求资源访问令牌access token的controller方法:

    //接受客户端返回的code,提交申请access token的请求

    @RequestMapping("/callbackCode")

    public Object toLogin(HttpServletRequestrequest)throws OAuthProblemException{

    System.out.println("-----------客户端/callbackCode--------------------------------------------------------------------------------");

    clientId = "clientId";

    clientSecret = "clientSecret";

    accessTokenUrl="http://localhost:8082/oauthserver/responseAccessToken";

    userInfoUrl = "userInfoUrl";

    redirectUrl = "http://localhost:8081/oauthclient01/server/accessToken";

    HttpServletRequest httpRequest = (HttpServletRequest)request;

    code = httpRequest.getParameter("code");

    System.out.println(code);

    OAuthClient oAuthClient =new OAuthClient(new URLConnectionClient());

    try {

    OAuthClientRequest accessTokenRequest = OAuthClientRequest

    .tokenLocation(accessTokenUrl)

    .setGrantType(GrantType.AUTHORIZATION_CODE)

    .setClientId(clientId)

    .setClientSecret(clientSecret)

    .setCode(code)

    .setRedirectURI(redirectUrl)

    .buildQueryMessage();

    //去服务端请求access token,并返回响应

    OAuthAccessTokenResponse oAuthResponse =oAuthClient.accessToken(accessTokenRequest, OAuth.HttpMethod.POST);

    //获取服务端返回过来的access token

    String accessToken = oAuthResponse.getAccessToken();

    //查看access token是否过期

    Long expiresIn =oAuthResponse.getExpiresIn();

    System.out.println("客户端/callbackCode方法的token:::"+accessToken);

    System.out.println("-----------客户端/callbackCode--------------------------------------------------------------------------------");

    return"redirect:http://localhost:8081/oauthclient01/server/accessToken?accessToken="+accessToken;

    } catch (OAuthSystemExceptione) {

    e.printStackTrace();

    }

    return null;

    }

    此方法对应开发步骤3的全部和步骤4的一半,也就是还包括接受服务端返回的access token。最后的redirect地址不是服务端的地址,只是将此token传进客户端的另一个方法,该方法就是最后的资源请求方法。

    2.3 利用服务端给的token去请求服务端的资源的controller方法。这里说的资源就是服务端数据库中的user表的uname值的拼接字段。

    //接受服务端传回来的access token,由此token去请求服务端的资源(用户信息等)

    @RequestMapping("/accessToken")

    public ModelAndView accessToken(StringaccessToken) {

    System.out.println("---------客户端/accessToken----------------------------------------------------------------------------------");

    userInfoUrl = "http://localhost:8082/oauthserver/userInfo";

    System.out.println("accessToken");

    OAuthClient oAuthClient =new OAuthClient(new URLConnectionClient());

    try {

    OAuthClientRequest userInfoRequest =new OAuthBearerClientRequest(userInfoUrl)

    .setAccessToken(accessToken).buildQueryMessage();

    OAuthResourceResponse resourceResponse =oAuthClient.resource(userInfoRequest, OAuth.HttpMethod.GET, OAuthResourceResponse.class);

    String username = resourceResponse.getBody();

    System.out.println(username);

    ModelAndView modelAndView =new ModelAndView("usernamePage");

    modelAndView.addObject("username",username);

    System.out.println("---------客户端/accessToken----------------------------------------------------------------------------------");

    returnmodelAndView;

    } catch (OAuthSystemExceptione) {

    e.printStackTrace();

    } catch (OAuthProblemExceptione) {

    e.printStackTrace();

    }

    System.out.println("---------客户端/accessToken----------------------------------------------------------------------------------");

    return null;

    }

    此方法对应开发步骤5的全部和步骤6的一半,也就是还包括接受服务端返回的资源信息。获取了资源信息之后,其余的开发就和平时的springmvc一毛一样了。

    以上三个方法我全部封装在同一个ServerController类中。

    服务端

    三 pom依赖

    org.apache.oltu.oauth2

    org.apache.oltu.oauth2.authzserver

    0.31

    org.apache.oltu.oauth2

    org.apache.oltu.oauth2.resourceserver

    0.31

    四 controller方法

    4.1 向客户端返回授权码code的controller方法

    @Controller

    public class AuthorizeController{

    @Autowired

    private UserServiceuserService;

    //向客户端返回授权许可码 code

    @RequestMapping("/responseCode")

    public Object toShowUser(Modelmodel, HttpServletRequestrequest){

    System.out.println("----------服务端/responseCode--------------------------------------------------------------");

    try {

    //构建OAuth授权请求

    OAuthAuthzRequest oauthRequest =new OAuthAuthzRequest(request);

    /*oauthRequest.getClientId();

    oauthRequest.getResponseType();

    oauthRequest.getRedirectURI();

    System.out.println(oauthRequest.getClientId());

    System.out.println(oauthRequest.getResponseType());

    System.out.println(oauthRequest.getRedirectURI());*/

    if(oauthRequest.getClientId()!=null&&oauthRequest.getClientId()!="")

    {

    //设置授权码

    String authorizationCode ="authorizationCode";

    //利用oauth授权请求设置responseType,目前仅支持CODE,另外还有TOKEN

    String responseType =oauthRequest.getParam(OAuth.OAUTH_RESPONSE_TYPE);

    //进行OAuth响应构建

    OAuthASResponse.OAuthAuthorizationResponseBuilderbuilder =

    OAuthASResponse.authorizationResponse(request, HttpServletResponse.SC_FOUND);

    //设置授权码

    builder.setCode(authorizationCode);

    //得到到客户端重定向地址

    String redirectURI =oauthRequest.getParam(OAuth.OAUTH_REDIRECT_URI);

    //构建响应

    final OAuthResponseresponse =builder.location(redirectURI).buildQueryMessage();

    System.out.println("服务端/responseCode内,返回的回调路径:"+response.getLocationUri());

    System.out.println("----------服务端/responseCode--------------------------------------------------------------");

    String responceUri =response.getLocationUri();

    //根据OAuthResponse返回ResponseEntity响应

    HttpHeaders headers =new HttpHeaders();

    try {

    headers.setLocation(new URI(response.getLocationUri()));

    } catch (URISyntaxExceptione) {

    // TODO Auto-generated catch block

    e.printStackTrace();

    }

    return"redirect:"+responceUri;

    }

    } catch (OAuthSystemExceptione) {

    e.printStackTrace();

    } catch (OAuthProblemExceptione) {

    e.printStackTrace();

    }

    System.out.println("----------服务端/responseCode--------------------------------------------------------------");

    return null;

    }

    }

    此段代码对应开发步骤2

    4.2 向客户端返回资源访问令牌accesstoken的controller方法

    @Controller

    public class AccessTokenController {

    //获取客户端的code码,向客户端返回access token

    @RequestMapping(value="/responseAccessToken",method = RequestMethod.POST)

    public HttpEntity token(HttpServletRequest request){

    System.out.println("--------服务端/responseAccessToken-----------------------------------------------------------");

    OAuthIssuer oauthIssuerImpl=null;

    OAuthResponse response=null;

    //构建OAuth请求

    try {

    OAuthTokenRequest oauthRequest =new OAuthTokenRequest(request);

    String authCode =oauthRequest.getParam(OAuth.OAUTH_CODE);

    String clientSecret = oauthRequest.getClientSecret();

    if(clientSecret!=null||clientSecret!=""){

    //生成Access Token

    oauthIssuerImpl =new OAuthIssuerImpl(new MD5Generator());

    final StringaccessToken =oauthIssuerImpl.accessToken();

    System.out.println(accessToken);

    System.out.println("--oooo---");

    //生成OAuth响应

    response = OAuthASResponse

    .tokenResponse(HttpServletResponse.SC_OK)

    .setAccessToken(accessToken)

    .buildJSONMessage();

    }

    System.out.println("--------服务端/responseAccessToken-----------------------------------------------------------");

    //根据OAuthResponse生成ResponseEntity

    return new ResponseEntity(response.getBody(), HttpStatus.valueOf(response.getResponseStatus()));

    } catch (OAuthSystemExceptione) {

    // TODO Auto-generated catch block

    e.printStackTrace();

    } catch (OAuthProblemExceptione) {

    // TODO Auto-generated catch block

    e.printStackTrace();

    }

    System.out.println("--------服务端/responseAccessToken-----------------------------------------------------------");

    return null;

    }

    }

    此段代码对应开发步骤4的前面一半,即服务端验证code、生成token并给客户端

    4.3 向客户端返回请求资源(username)的controller方法

    @Controller

    public class UserInfoController {

    @Autowired

    private UserServiceuserService;

    @RequestMapping("/userInfo")

    public HttpEntity userInfo(HttpServletRequest request)throws OAuthSystemException{

    System.out.println("-----------服务端/userInfo-------------------------------------------------------------");

    try {

    //获取客户端传来的OAuth资源请求

    OAuthAccessResourceRequest oauthRequest =new OAuthAccessResourceRequest(request, ParameterStyle.QUERY);

    //获取Access Token

    String accessToken =oauthRequest.getAccessToken();

    System.out.println("accessToken");

    //验证Access Token

    /*if (accessToken==null||accessToken=="") {

    // 如果不存在/过期了,返回未验证错误,需重新验证

    OAuthResponse oauthResponse = OAuthRSResponse

    .errorResponse(HttpServletResponse.SC_UNAUTHORIZED)

    .setError(OAuthError.ResourceResponse.INVALID_TOKEN)

    .buildHeaderMessage();

    HttpHeaders headers = new HttpHeaders();

    headers.add(OAuth.HeaderType.WWW_AUTHENTICATE,

    oauthResponse.getHeader(OAuth.HeaderType.WWW_AUTHENTICATE));

    return new ResponseEntity(headers, HttpStatus.UNAUTHORIZED);

    } */

    //返回用户名

    User user=userService.selectByPrimaryKey(1);

    String username = accessToken+"---"+Math.random()+"----"+user.getUname();

    System.out.println(username);

    System.out.println("服务端/userInfo::::::ppp");

    System.out.println("-----------服务端/userInfo----------------------------------------------------------");

    return new ResponseEntity(username, HttpStatus.OK);

    } catch (OAuthProblemExceptione) {

    // TODO Auto-generated catch block

    e.printStackTrace();

    //检查是否设置了错误码

    String errorCode =e.getError();

    if (OAuthUtils.isEmpty(errorCode)) {

    OAuthResponse oauthResponse = OAuthRSResponse

    .errorResponse(HttpServletResponse.SC_UNAUTHORIZED)

    .buildHeaderMessage();

    HttpHeaders headers =new HttpHeaders();

    headers.add(OAuth.HeaderType.WWW_AUTHENTICATE,

    oauthResponse.getHeader(OAuth.HeaderType.WWW_AUTHENTICATE));

    return new ResponseEntity(headers, HttpStatus.UNAUTHORIZED);

    }

    OAuthResponse oauthResponse = OAuthRSResponse

    .errorResponse(HttpServletResponse.SC_UNAUTHORIZED)

    .setError(e.getError())

    .setErrorDescription(e.getDescription())

    .setErrorUri(e.getUri())

    .buildHeaderMessage();

    HttpHeaders headers =new HttpHeaders();

    headers.add(OAuth.HeaderType.WWW_AUTHENTICATE,

    oauthResponse.getHeader(OAuth.HeaderType.WWW_AUTHENTICATE));

    System.out.println("-----------服务端/userInfo------------------------------------------------------------------------------");

    return new ResponseEntity(HttpStatus.BAD_REQUEST);

    }

    }

    }

    此代码对应开发步骤6的前一半。即服务端验证access token、并将资源信息给客户端

    至此,整个Java集成oauth就完成了。

    展开全文
  • 完整Oauth 2.0实现实例

    2015-03-06 13:38:19
    完整Oauth 2.0 代码实现,包含数据库脚本,使用说明,导入数据库脚本,修改数据库配置可直接运行。
  • OAuth2代码实例

    2018-06-30 17:10:29
    OAuth2代码实例,maven项目,加入eclipse可以直接运行。
  • Spring cloud Oauth2使用授权码模式实现登录验证授权
  • 上一篇对Spring Authorization Server利用JWT认证OAuth2客户端的逻辑进行了分析,本篇我们将对private_key_jwt类型的认证方式进行实战练习。 private_key_jwt客户端认证 关于private_key_jwt客户端认证,在我相关的...
  • java oauth2.0 将Google和GitHub OAuth登录添加到Java应用程序的指南 我们添加到Takipi的最新功能之一是3rd party登录。 如果您像我一样懒惰,那么我想您也希望跳过填写表单和输入新密码的操作 。 只要有权限,...
  • Javaoauth2.0 服务端与客户端的实现.zip 封装了oauth2.0的基本架构和实现
  • Javaoauth2.0 服务端与客户端的实现。 压缩包解压里面两个maven项目:oauthserver和oauthclient01,分别对应oauth服务端和客户端。
  • java源码:OAuth 实现框架 Agorava.zip
  • OAuth2授权码登录(开发完成) OAuth2刷新TOKEN(开发完成) 微信登录(开发完成) 短信登录(开发完成) 文件 技术栈: Sprint Boot Spring安全 Spring安全OAuth2 Mybatis 环境依赖: JRE1.8 的Mysql5.7 配置...
  • 但在原有的 spring security oauth2 令牌方法流程(所谓的登录)无法满足类似的需求。我们先来看TokenEndpoint的方法流程客户端 带参访问 /oauth/token 接口,最后去调用TokenGranter另外要注意:突破高薪Java架构...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 26,902
精华内容 10,760
关键字:

java自己实现oauth2

java 订阅