精华内容
下载资源
问答
  • Javaoauth2.0 服务端与客户端的实现.zip 封装了oauth2.0的基本架构和实现,对照我的博客http://blog.csdn.net/jing12062011/article/details/78147306使用该源码。 下载项目压缩包,解压,里面两个maven项目:...
  • java oauth2.0 使用Okta的身份管理平台轻松部署您的应用程序 使用Okta的API在几分钟之内即可对任何应用程序中的用户进行身份验证,管理和保护。 今天尝试Okta。 现代应用程序依赖于用户身份验证,但是它可能给Java...

    java oauth2.0

    使用Okta的身份管理平台轻松部署您的应用程序 使用Okta的API在几分钟之内即可对任何应用程序中的用户进行身份验证,管理和保护。 今天尝试Okta。

    现代应用程序依赖于用户身份验证,但是它可能给Java开发人员带来困难的挑战,以及一系列特定于框架的选项供您选择。 我们已经看到许多Spring开发人员从一个简单的本地身份验证服务开始,他们计划用一个更强大的选项替换“后来的”……只是为了让该本地服务将其方式扩展到堆栈中的永久位置。 为了结束这一令人心碎的循环,这篇文章将展示即使在一个简单的应用程序中,实现企业级身份验证服务也是如此简单。

    在本教程中,您将创建一个显示用户信息的应用程序。 您将首先手动配置它,以查看其缺点。 然后,我们将使用更专业的方法。 在本教程结束时,您将拥有一个基于Spring的Java应用程序,该应用程序使用OAuth 2.0对用户进行身份验证,并且需要5分钟的时间进行这些更改!

    使用Spring创建Java应用程序

    让我们从创建项目结构开始。 您将使用Spring Initializer创建应用程序。 转到start.spring.io并填写以下信息:

    • 项目: Maven项目
    • 语言: Java
    • 组: com.okta.authorizationapp
    • 工件: oauth
    • 依存关系:
      • Spring网

    您也可以从命令行生成项目。 将以下命令粘贴到终端中,以使用与上述相同的配置下载项目:

    curl https://start.spring.io/starter.zip \
            -d dependencies=web,thymeleaf,security \
            -d packageName=com.okta.authorizationapp \
            -d name=authorization-app \
            -d type=maven-project \
            -o java-authorization-app.zip

    而已! 现在,您的Java项目结构已创建,您可以开始开发应用程序了。

    自行构建用户安全性

    本教程将使用Maven,但您可以根据需要轻松使用Gradle进行操作。

    首先,将项目导入您喜欢的IDE /编辑器中。 现在,您的项目只有一个类,即引导应用程序的style="font-size:13px" class="highlighter-rouge">AuthorizationAppApplication 。 运行此类时,服务器将启动,并且可以转到浏览器以查看结果。

    但是,您首先需要一个页面才能访问,因此让我们创建一个主页。

    内部style="font-size:13px" class="highlighter-rouge">src/main/java/com/okta/authorizationapp/controller/创建类style="font-size:13px" class="highlighter-rouge">HomeController

    @Controller
    public class HomeController {
    
        private Map<String, LocalDateTime> usersLastAccess = new HashMap<>();
    
        @GetMapping("/")
        public String getCurrentUser(@AuthenticationPrincipal User user, Model model) {
            String username = user.getUsername();
            
            model.addAttribute("username", username);
            model.addAttribute("lastAccess", usersLastAccess.get(username));
    
            usersLastAccess.put(username, LocalDateTime.now());
    
            return "home";
        }
    }

    此类定义了/路径的控制器。 当您在未定义任何其他路径的情况下访问应用程序时,将执行此代码。

    控制器的第一个重要操作将检索当前用户的信息。 由于您使用AuthenticationPrincipal注释了user属性,因此Spring Security将自动检索此信息。

    控制器还接收一个model参数,该参数存储用于呈现页面的数据。 现在,此数据是username和用户上次访问您的应用程序的时间。

    在用户登录时创建动态消息

    最后一步是更新用户的上次访问日期,并定义应呈现请求HTML模板。 在您的情况下,端点称为home 。 Spring将在src/main/resources/templates文件夹中搜索home.html文件。

    您还没有此文件,所以让我们去创建它:

    <html>
      <head>
        <title>Java OAuth 2.0 Tutorial - Homepage</title>
      </head>
      <body>
        <h1 th:text="'Welcome, ' + ${username} + '!'"></h1>
        <ul>
          <li th:if="${lastAccess}" th:text="'Last access: ' + ${lastAccess}"></li>
        </ul>
      </body>
    </html>

    这是一个HTML文件,由Thymeleaf稍作更改, Thymeleaf是您在创建项目时导入的库之一。 Thymeleaf从服务器接收模型对象,并以HTML呈现该对象的值。 只需键入${variable}即可引用model对象中的变量。

    通过th:text属性,您可以在HTML元素中定义动态文本。 在这里,我们使用它来显示动态问候语,以及用户上次访问该应用程序的时间。

    用户首次访问您的应用时,不会记录任何先前的访问。 为了确保您不会出现无意义的字段,请使用th:if 。 如果该字段为null ,则不会呈现li标签,并且用户将看不到它。

    将基本登录添加到Java Spring应用程序

    现在有了端点,您只需要为应用程序添加安全性即可。

    src/main/javacom/okta/authorizationapp/configuration/创建类SecurityConfiguration

    @EnableWebSecurity
    public class SecurityConfiguration extends WebSecurityConfigurerAdapter {
    
        private PasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
    
        @Override
        protected void configure(AuthenticationManagerBuilder auth) throws Exception {
            auth.inMemoryAuthentication()
                    .passwordEncoder(passwordEncoder())
                    .withUser("john.doe")
                    .password(passwordEncoder().encode("secret"))
                    .roles("USER");
        }
    
        @Bean
        public PasswordEncoder passwordEncoder() {
            return passwordEncoder;
        }
    }

    此类将确保用户必须登录才能访问您的应用程序。 目前只有一个名为john.doe用户可以登录该应用程序。

    通过调用AuthorizationAppApplication内部的main方法来运行应用程序。 您也可以从命令行运行它。 在项目文件夹中,运行以下命令:

    mvn spring-boot:run

    当您访问http://localhost:8080 ,应该看到以下登录页面:

    键入john.doesecret作为用户名和密码。 您应该被重定向到主页。 第一次访问时,只有Welcome, john.doe! 将显示。 在第二次访问中,您还应该看到最后一次访问:

    现在,您有了一个管理安全性的应用程序。 做得好!

    但是,有一个大问题……现在您只能以一个用户身份登录。 更糟糕的是,用户信息被硬编码在您的应用程序中。 为了简化用户访问和安全性,您可以使用Okta来管理身份验证。 它将在5分钟内为您提供一种非常简单的方法来与OAuth 2.0集成。 让我们在示例应用中配置OAuth 2.0,以了解它的简易性。 首先创建一个Okta帐户。

    创建一个Okta帐户

    如果您没有Okta帐户, 请继续创建一个 。 注册后,请执行以下步骤:

    • 登录到您的帐户
    • 单击应用程序 > 添加应用程序

    您将被重定向到以下页面:

    • 选择网站 ,然后单击下一步。

    在表格中填写以下选项:

    • 名称: hello-world
    • 基本URI: http://localhost:8080
    • 登录重定向URL: http://localhost:8080/login/oauth2/code/okta
    • 允许的授予类型:
      • 客户凭证
    • 单击完成

    现在,您可以使用Okta应用程序对应用程序的用户进行身份验证。

    使用OAuth 2.0:一种快速,专业的方法

    首先,将Okta的库添加到您的项目中。

    转到pom.xml并添加Okta的Spring Boot启动器:

    <dependency>
        <groupId>com.okta.spring</groupId>
        <artifactId>okta-spring-boot-starter</artifactId>
        <version>1.3.0</version>
    </dependency>

    Okta将管理您的应用程序身份验证,因此您可以删除SecurityConfiguration类。

    HomeController ,进行以下更改:

    @GetMapping("/")
    public String getCurrentUser(@AuthenticationPrincipal OidcUser user, Model model) {
        String email = user.getEmail();
    
        model.addAttribute("email", email);
        model.addAttribute("lastAccess", usersLastAccess.get(email));
        model.addAttribute("firstName", user.getGivenName());
        model.addAttribute("lastName", user.getFamilyName());
    
        usersLastAccess.put(email, LocalDateTime.now());
    
        return "home";
    }

    您的端点现在将收到与OAuth 2.0兼容的OidcUser 。 此类提供了比以前更多的用户信息,因此您可以修改HTML以显示它。 用email替换username ,并添加firstNamelastName ,这是您之前没有的字段。 为此,请转到hello.html并进行以下更改:

    <body>
      <h1 th:text="'Welcome, ' + ${email} + '!'"></h1>
      <ul>
        <li th:if="${lastAccess}" th:text="'Last access: ' + ${lastAccess}"></li>
        <li th:if="${firstName}" th:text="'First name: ' + ${firstName}"></li>
        <li th:if="${lastName}" th:text="'Last name: ' + ${lastName}"></li>
      </ul>
    </body>

    您仍然像以前一样向用户打招呼,但同时还显示来自端点的新信息。 您已经对所有代码进行了更改,现在只需要添加一些配置即可。 使用以下环境变量在应用程序的根目录中创建okta.env文件。

    export OKTA_OAUTH2_ISSUER=https://{yourOktaDomain}/oauth2/default
    export OKTA_OAUTH2_CLIENT_ID={CLIENT_ID}
    export OKTA_OAUTH2_CLIENT_SECRET={CLIENT_SECRET}

    您可以从Okta信息中心的应用程序页面中找到{CLIENT_ID}{CLIENT_SECRET} 。 要访问它,请按照以下步骤操作:

    • 在您的Okta仪表板中,转到“ 应用程序”
    • 选择hello-world应用程序
    • 单击常规选项卡

    您应该在“客户端凭据”区域中看到两个值。 您的{yourOktaDomain}将显示在Okta仪表板中,只需单击菜单中的“ 仪表板 ”即可。 您将在右上角看到组织URL。

    将这些值粘贴到okta.env ,运行以下命令以启动应用程序。

    source okta.env
    mvn spring-boot:run

    而已!

    启用OAuth 2.0登录到您的Spring应用程序

    导航到http://localhost:8080 。 您的应用程序会将您重定向到Okta的登录页面:

    登录后,您将被重定向到您的应用程序,并看到以下消息:

    你完成了! 在5分钟内,您只需很少的配置即可在应用程序中添加OAuth 2.0。

    了解有关Spring安全性,Spring Boot和Java身份验证的更多信息

    如果要查看完整的源代码,可以在GitHub上访问它。

    您是否想全面了解OAuth 2.0和Java? 您可能对以下文章感兴趣:

    有关此类文章的更多信息, 请在Twitter上关注@oktadev 。 我们还会定期将截屏视频发布到我们的YouTube频道

    使用Okta的身份管理平台轻松部署您的应用程序 使用Okta的API在几分钟之内即可对任何应用程序中的用户进行身份验证,管理和保护。 今天尝试Okta。


    翻译自: https://www.javacodegeeks.com/2019/12/oauth-2-0-java-guide-secure-your-app-in-5-minutes.html

    java oauth2.0

    展开全文
  • Javaoauth2.0 服务端与客户端的实现源码下载,里面两个maven项目:oauthserver和oauthclient01。
  • java oauth2.0 将Google和GitHub OAuth登录添加到Java应用程序的指南 我们添加到Takipi的最新功能之一是3rd party登录。 如果您像我一样懒惰,那么我想您也希望跳过填写表单和输入新密码的操作 。 只要有权限,...

    java oauth2.0

    duke-oauth-java-keys

    将Google和GitHub OAuth登录添加到Java应用程序的指南

    我们添加到Takipi的最新功能之一是3rd party登录。 如果您像我一样懒惰,那么我想您也希望跳过填写表单和输入新密码的操作 。 只要有权限,许多人都希望使用第三方登录,只要他们要求的权限是非侵入性的-没有人真正希望在Facebook墙上显示随机帖子,因此这种访问方式仅包括用户的基本信息,例如姓名和电子邮件地址。 在本文中,您将初步了解我们如何在Takipi中实现此功能,如何在应用程序中使用3rd party登录,以及我们获得的一些见解,如果您决定集成,则可以节省一些宝贵的时间使用您自己的应用程序。

    新帖:如何实现Java OAuth 2.0以使用GitHub和Google登录http://t.co/20Hn59dCtf pic.twitter.com/3tNNwPKjET

    — Takipi(@takipid) 2015年5月14日

    在我们自己的小宇宙中,事实证明,我并不孤单,许多用户也有同样的感觉。 由于我们是一家开发人员工具初创公司,因此使用GitHub和Google的第三方登录非常合理。 除了为用户提供便利之外,使用第三方服务还可以增强其安全性。 由于Google和GitHub使用双重身份验证(2FA),您的应用程序可以“免费”享受这种安全级别。 在我们的案例中,我们已经启用了2FA,所以我想这使我们……3FA&#55357;&#56859;

    带有第3个聚会登录按钮的新主页的样机预览

    带有第3个聚会登录按钮的新主页的样机预览

    要查看其在实际中的工作方式,您可以查看我们内部用于测试的页面 。 完全可以使用,但是更新尚未在该站点上发布。 您在这里有一个难得的机会成为第一个使用它的人:)

    因此,提醒我OAuth 2.0又如何发展?

    OAuth登录流程如下:用户访问您的站点,单击“使用任何方式登录”按钮,然后重定向到权限页面。 权限页面来自Whatever™,当他们批准您要求的权限时,Whatever™向他们发送一个令牌,令牌将由他的浏览器发送到您的应用程序的后端。 拥有令牌后,将其发送回Whatever™进行验证并假设它已通过验证–您可以访问被授予权限的数据。

    Google OAuth2.0库

    为了在我们的网站上实现第三方登录,我们使用了Google APIs Java 客户端库 。 在GitHub顶级Java项目使用前100个库中 ,还包含Jackson2,ProtoBuf和所有其他方便的实用程序。 对于我们来说,这是一个非常简单的选择,因为我们已经将该库用于其他目的,而且,老实说,谷歌库只是出现在……谷歌上的第一个结果。 准备好您的锡箔帽子

    使用Google实施登录

    这是旅途中的轻松部分; Google的说明文件很明确而且很明确。 由于它是他们自己的库,因此他们还抽象了过程的一部分并在后台对其进行处理,从而使其更易于实现。 第一步是在Google开发人员控制台上创建一个项目,您可以在其中注册应用程序并自定义权限页面。

    Google的权限页面–为Takipi定制

    Google的权限页面–为Takipi定制

    现在回到Java。 从本质上讲,该过程可以简化为几个简单的步骤,不会让人感到意外。 首先,我们构建并执行一个获取GoogleTokenResponse的请求,以便我们可以验证从用户那里获得的令牌。 然后,我们使用此响应来创建一个GoogleCredential ,让我们对其调用getAccessToken()并以JSON格式返回用户的信息:

    JsonFactory jsonFactory = new JacksonFactory();
    HttpTransport httpTransport = new NetHttpTransport();
    
    GoogleTokenResponse tokenResponse = new GoogleAuthorizationCodeTokenRequest(
                         httpTransport, jsonFactory,
                         /* Client ID and Secret */,
                         code, "postmessage").execute();
    
    GoogleCredential credential = new GoogleCredential.Builder()
                        .setJsonFactory(jsonFactory)
                        .setTransport(httpTransport)
                        .setClientSecrets(/* Client ID and Secret */).build()
                        .setFromTokenResponse(tokenResponse);
    
    Oauth2 oauth2 = new Oauth2.Builder(httpTransport, jsonFactory, credential).setApplicationName("YourAppName").build();
    Tokeninfo tokenInfo = oauth2.tokeninfo().setAccessToken(credential.getAccessToken()).execute();
    
    return oauth2.userinfo().get().execute();

    繁荣。 而已。 最好的建议是仅遵循官方文档。 在GitHub的一端,实现有些棘手。

    使用GitHub实施登录

    现在,我们意识到Google帮助我们在OAuth方面走了一些弯路,并在GoogleTokenResponse和GoogleCredential中使用了抽象。 使用GitHub,我们必须更接近原始协议。 与Google类似,在GitHub的开发人员应用程序屏幕上注册我们的应用程序时,我们可以自定义权限屏幕

    GitHub的权限页面–为Takipi定制

    当我们到达实际的代码时,有3个主要问题使我们放慢了速度,而在文档中找不到。 解决方法如下:

    1.建立自己的请求流程

    在Google的情况下,只有5行代码,变成了19行,因此我们可以生成GitHub tokenResponse。 以下是您自己建立请求的方法:

    JsonFactory jsonFactory = new JacksonFactory();
    HttpTransport httpTransport = new NetHttpTransport();
    
    AuthorizationCodeFlow flow = new AuthorizationCodeFlow.Builder(
                     BearerToken.authorizationHeaderAccessMethod(),
                     httpTransport, jsonFactory,
                     new GenericUrl("https://github.com/login/oauth/access_token"),
                     new ClientParametersAuthentication(/* Client ID and Secret */),
                     /* Client ID */
                     "https://github.com/login/oauth/authorize").build();
    
    TokenResponse tokenResponse = flow
                     .newTokenRequest(code)
                     .setScopes(Collections.singletonList("user:email"))
                     .setRequestInitializer(new HttpRequestInitializer() {
                       @Override
                       public void initialize(HttpRequest request) throws IOException {
                            request.getHeaders().setAccept("application/json");
                       }
                     }).execute();

    由于某种原因,字符串是默认值

    注意到setAccept的更早的初始化方法吗? 这有点令人惊讶。 事实证明,您需要明确要求GitHub以JSON格式返回响应,否则您将以字符串格式获取响应。 如果我们事先知道的话,它可以为我们节省一些时间,例如:

    但值得庆幸的是,我们找到了一些胶带和回形针来处理事情

    但值得庆幸的是,我们找到了一些胶带和回形针来处理事情

    3.处理用于GitHub登录的用户电子邮件

    现在,一个GitHub用户可能有多个电子邮件地址,然后您必须选择用于自己目的的电子邮件地址。 因此,我们创建了一个getBestEmail方法,该方法可以对电子邮件数组进行排序(注意,它应该扩展ArrayList才能起作用)。 在对电子邮件数组进行排序之后,我们选择了可以找到的最佳选项:

    public class GithubEmails extends ArrayList<GithubEmail> {
      public GithubEmail getBestEmail() {
        if (isEmpty()) {
          return null;
        }
    
        Collections.sort(this, GithubEmail.bestEmailComparator);
    
        return get(0);
      }
    }

    那么最好的选择是什么? 我们从GitHub的响应中获得的此电子邮件数组中的每个字段都有一封电子邮件,一个经过验证的字段和一个主字段。 这是我们实现的排序比较器:

    public static final Comparator<? super GithubEmail> bestEmailComparator =
        new Comparator<GithubEmail>() {
          @Override
          public int compare(GithubEmail o1, GithubEmail o2) {
            if (o1.verified != o2.verified) {
              return (o1.verified ? -1 : 1);
            }
    
            if (o1.primary != o2.primary) {
              return (o1.primary ? -1 : 1);
            }
    
          return o1.email.compareTo(o2.email);
      }
    };

    因此,基本上您可以看到我们更喜欢经过验证的电子邮件和主要电子邮件。

    结论

    我们希望这篇文章可以帮助您将注意力集中在如何通过Google和GitHub的登录方法来访问OAuth和Java上。 虽然这是我们决定实现的方式,但是您可以使用其他方式和库来获得类似的结果。 我们很高兴听到您采用哪种方法,更喜欢哪种库并回答有关此实现的任何问题。 如果您对我们的决定方式有任何意见或建议,请在下面的评论部分中告知我。 而且,如果您遇到麻烦,请分享您遇到的困难,我们将很乐于帮助和分享更多代码。

    翻译自: https://www.javacodegeeks.com/2015/05/tutorial-how-to-implement-java-oauth-2-0-to-sign-in-with-github-and-google.html

    java oauth2.0

    展开全文
  • 基于MAVEN+OLTU开源代码实现javaOauth2.0前后端,数据加密使用MD5。
  • 将Google和GitHub OAuth登录添加到Java应用程序的指南 我们添加到Takipi的最新功能之一是3rd party登录。 如果您像我一样懒惰,那么我想您也希望跳过填写表单和输入新密码的操作 。 只要有权限,许多人都希望使用...

    duke-oauth-java-keys

    将Google和GitHub OAuth登录添加到Java应用程序的指南

    我们添加到Takipi的最新功能之一是3rd party登录。 如果您像我一样懒惰,那么我想您也希望跳过填写表单和输入新密码的操作 。 只要有权限,许多人都希望使用第三方登录,只要他们要求的权限是非侵入性的-没有人真正希望在Facebook墙上显示随机帖子,因此这种访问方式仅包括用户的基本信息,例如姓名和电子邮件地址。 在本文中,您将初步了解我们如何在Takipi中实现此功能,如何在应用程序中使用3rd party登录,以及我们获得的一些见解,如果您决定集成,将为您节省宝贵的时间使用您自己的应用程序。

    新帖:如何实现Java OAuth 2.0以使用GitHub和Google登录http://t.co/20Hn59dCtf pic.twitter.com/3tNNwPKjET

    — Takipi(@takipid) 2015年5月14日

    在我们自己的小宇宙中,事实证明我并不孤单,我们的许多用户也有同样的感觉。 由于我们是开发人员工具初创公司,因此使用GitHub和Google的第3方登录非常合理。 除了为用户提供便利之外,使用第三方服务还可以增强其安全性。 由于Google和GitHub使用双重身份验证(2FA),因此您的应用程序可以“免费”享受这种安全级别。 在我们的案例中,我们已经启用了2FA,所以我想这使我们……3FA&#55357;&#56859;

    带有第3个聚会登录按钮的新首页的样机预览

    带有第3个聚会登录按钮的新首页的样机预览

    要查看其在实际中的工作方式,您可以查看我们内部用于测试的页面 。 它完全可以正常运行,但是该更新尚未在该站点上发布。 您在这里有一个难得的机会成为第一个使用它的人:)

    因此,提醒我OAuth 2.0又如何发展?

    OAuth登录流程如下:用户转到您的站点,单击“使用任何方式登录”按钮,然后重定向到权限页面。 权限页面来自Whatever™,当他们批准您要求的权限时,Whatever™向他们发送一个令牌,令牌将由他的浏览器发送到您的应用程序的后端。 拥有令牌后,将其发送回Whatever™进行验证并假设它已通过验证–您可以访问被授予权限的数据。

    Google OAuth2.0库

    为了在我们的网站上实现第三方登录,我们使用了Google APIs Client Java for Java。 在GitHub顶级Java项目使用前100个库中 ,还包含Jackson2,ProtoBuf和所有其他方便的实用程序。 对于我们来说,这是一个非常简单的选择,因为我们已经将该库用于其他目的,而且,老实说,谷歌库只是出现在……谷歌上的第一个结果。 准备好您的锡箔帽子

    使用Google实施登录

    这是旅途中的轻松部分; Google方面的文档清晰明确。 由于它是他们自己的库,因此他们还抽象了过程的一部分并在后台进行处理,从而使其更易于实现。 第一步是在Google开发人员控制台上创建一个项目,您可以在其中注册您的应用程序并自定义权限页面。

    Google的权限页面–为Takipi定制

    Google的权限页面–为Takipi定制

    现在回到Java。 从本质上讲,该过程可以归纳为几个简单的步骤,毫不奇怪。 首先,我们构建并执行一个获取GoogleTokenResponse的请求,以便我们可以验证从用户那里获得的令牌。 然后,我们使用此响应来创建一个GoogleCredential ,让我们对其调用getAccessToken()并以JSON格式返回用户的信息:

    JsonFactory jsonFactory = new JacksonFactory();
    HttpTransport httpTransport = new NetHttpTransport();
    
    GoogleTokenResponse tokenResponse = new GoogleAuthorizationCodeTokenRequest(
                         httpTransport, jsonFactory,
                         /* Client ID and Secret */,
                         code, "postmessage").execute();
    
    GoogleCredential credential = new GoogleCredential.Builder()
                        .setJsonFactory(jsonFactory)
                        .setTransport(httpTransport)
                        .setClientSecrets(/* Client ID and Secret */).build()
                        .setFromTokenResponse(tokenResponse);
    
    Oauth2 oauth2 = new Oauth2.Builder(httpTransport, jsonFactory, credential).setApplicationName("YourAppName").build();
    Tokeninfo tokenInfo = oauth2.tokeninfo().setAccessToken(credential.getAccessToken()).execute();
    
    return oauth2.userinfo().get().execute();

    繁荣。 而已。 最好的建议是仅遵循官方文档。 在GitHub的一端,实现有些棘手。

    使用GitHub实施登录

    现在,我们意识到Google帮助我们在OAuth方面走了一些弯路,并在GoogleTokenResponse和GoogleCredential中使用了抽象。 使用GitHub,我们必须更接近原始协议。 与Google类似,在GitHub的开发人员应用程序屏幕上注册我们的应用程序时,我们可以自定义权限屏幕

    GitHub的权限页面–为Takipi定制

    当我们到达实际的代码时,有3个主要问题使我们放慢了速度,而在文档中找不到。 解决方法如下:

    1.建立自己的请求流程

    在Google的情况下,只有5行代码,变成了19行,因此我们可以生成GitHub tokenResponse。 以下是您自己建立请求的方法:

    JsonFactory jsonFactory = new JacksonFactory();
    HttpTransport httpTransport = new NetHttpTransport();
    
    AuthorizationCodeFlow flow = new AuthorizationCodeFlow.Builder(
                     BearerToken.authorizationHeaderAccessMethod(),
                     httpTransport, jsonFactory,
                     new GenericUrl("https://github.com/login/oauth/access_token"),
                     new ClientParametersAuthentication(/* Client ID and Secret */),
                     /* Client ID */
                     "https://github.com/login/oauth/authorize").build();
    
    TokenResponse tokenResponse = flow
                     .newTokenRequest(code)
                     .setScopes(Collections.singletonList("user:email"))
                     .setRequestInitializer(new HttpRequestInitializer() {
                       @Override
                       public void initialize(HttpRequest request) throws IOException {
                            request.getHeaders().setAccept("application/json");
                       }
                     }).execute();

    由于某些原因,字符串是默认值

    注意到setAccept的更早的初始化方法吗? 这有点令人惊讶。 事实证明,您需要明确要求GitHub以JSON格式返回响应,否则您将以字符串格式获取响应。 如果我们提前知道的话,可以节省一些时间,例如:

    但值得庆幸的是,我们找到了一些胶带和回形针来处理事情

    但值得庆幸的是,我们找到了一些胶带和回形针来处理事情

    3.处理用于GitHub登录的用户电子邮件

    现在,一个GitHub用户可能有多个电子邮件地址,然后您必须选择用于自己目的的电子邮件地址。 因此,我们创建了一个getBestEmail方法,该方法可以对电子邮件数组进行排序(注意,它应该扩展ArrayList才能起作用)。 在对电子邮件数组进行排序之后,我们选择了可以找到的最佳选项:

    public class GithubEmails extends ArrayList<GithubEmail> {
      public GithubEmail getBestEmail() {
        if (isEmpty()) {
          return null;
        }
    
        Collections.sort(this, GithubEmail.bestEmailComparator);
    
        return get(0);
      }
    }

    那么最好的选择是什么? 我们从GitHub的响应中获得的此电子邮件数组中的每个字段都有一封电子邮件,一个经过验证的字段和一个主字段。 这是我们实现的排序比较器:

    public static final Comparator<? super GithubEmail> bestEmailComparator =
        new Comparator<GithubEmail>() {
          @Override
          public int compare(GithubEmail o1, GithubEmail o2) {
            if (o1.verified != o2.verified) {
              return (o1.verified ? -1 : 1);
            }
    
            if (o1.primary != o2.primary) {
              return (o1.primary ? -1 : 1);
            }
    
          return o1.email.compareTo(o2.email);
      }
    };

    因此,基本上您可以看到我们更喜欢验证和主要电子邮件。

    结论

    我们希望本文有助于您全神贯注如何通过Google和GitHub的登录方法来访问OAuth和Java。 虽然这是我们决定实现的方法,但是您可以使用其他方法和库来实现类似的结果。 我们很高兴听到您采用哪种方法,更喜欢哪种库并回答有关此实现的任何问题。 如果您对我们的决定方式有任何意见或建议,请在下面的评论部分中告知我。 而且,如果您遇到麻烦,请分享您遇到的困难,我们将很乐于帮助和分享更多代码。

    翻译自: https://www.javacodegeeks.com/2015/05/tutorial-how-to-implement-java-oauth-2-0-to-sign-in-with-github-and-google.html

    展开全文
  • Javaoauth2.0 服务端与客户端的实现.
  • Oauth2.0 密码模式单点登录客户端及服务端实现,导入MAVEN工程,导入Client1-root ,包含7个子工程,client1-web,client2-web是客户端项目,sessmgr是服务端,运行这3个项目 ,可测试单点登录功能
  • IdentityServer4, OpenID连接和用于 ASP.NET 内核的OAuth 2.0框架 关于 IdentityServer4 IdentityServer是一个免费的开源 OpenID连接插件和的OAuth 2.0插件框架,用于 ASP.NET 内核。 通过使用和 Brock Allen 创建和...
  • 自己练手写的第三方登录,主要重点在AfterAction中参数的配置以及方法的调用,注意Config中qqconnectin那个配置文件,里面的参数很重要
  • oauth2.0.rar

    2019-08-23 13:11:06
    Springboot2+SpringSecurity+Oauth2+Mysql数据库实现持久化客户端数据 分为授权服务和资源服务2个工程 ,详细说明参看https://www.cnblogs.com/zsg88/p/11382054.html
  • springboot集成oauth2.0

    2018-07-27 15:33:13
    springboot 集成oauth2.0服务器,基于oauth2.0授权码形式集成
  • spring security 基于oauth 2.0 实现 sso 单点登录Demo 使用 spring security 基于oauth 2.0 实现 sso 单点登录Demo spring boot + spring security + spring security oauth
  • 兼容OAuth 2.0和OpenID Connect(OIDC)的授权服务器,仅用于演示目的,可用作OAuth2 / OIDC研讨会的一部分。 目标 此授权服务器应... 作为开源免费提供 支持学习OAuth2 / OpenID Connect的努力(自学或作为研讨会...
  • OAUTH2.0+OpenLDAP技术框架,及适用场景,综合价值等PPT文档,可修改!!!
  • 2.0 依赖中间件只需要 mysql、redis 即可,提供傻瓜式部署方案,大大缩减了上手和使用成本。 2. 提供常见容器的支持 默认 提供docker-compose的支持,提供kubernetes (thx @毛子坤) 脚本支持。 3. 网关使用高性能...
  • oauth2.0:oauth2.0-源码

    2021-06-09 18:25:44
    oauth2.0 Java 中的 OAuth2.0 实现。 它使用 apache-oltu 和 jersey 插件。 代码是用Java开发的
  • OAuth2.0 JAVA服务端和客户端功能实现(带jar包)

    千次下载 热门讨论 2014-10-27 17:29:40
    OAuth2.0 JAVA服务端和客户端功能实现(带jar包)
  • 通过httpclient post去获取,response返回码是302,返回的code放在header的Location中。 请求的时候client_id,response_type,redirect_uri,state拼接在url后面,account和password放在body表单(x-...
  • ssm搭建、Oauth2.0客户端和服务端

    热门讨论 2018-02-26 11:02:12
    包括三个简单的项目以及mybatis用于自动生成bean、dao、mapping所需的文件,项目分别为: 1、ssm的简单搭建。 2、oauth2.0的客户端。 3、oauth2.0的服务端。
  • Spring-OAuth2-JPA-示例 一个简单且基本的示例,使用Spring Boot,Security,OAuth2和JPA通过身份验证来保护REST APsI。 您可以在spring的官方文档中找到有关此主题的更多信息:
  • 这篇文章最初发表在Takipi博客上 -Java和Scala异常分析和性能监控。 我们添加到Takipi的最新功能之一是第三方登录。 如果您像我一样懒惰,那么我想您也希望跳过填写表单和输入新密码的操作 。 只要有权限,许多人...

    java oauth2.0

    这篇文章最初发布在Takipi博客上 -Java和Scala异常分析和性能监控。

    我们已添加到Takipi的最新功能之一是第三方登录。 如果您像我一样懒惰,那么我想您也希望跳过填写表单和输入新密码的操作 。 只要有权限,许多人就会选择第三方登录,只要他们要求的权限是非侵入性的-没有人真正希望在自己的Facebook墙上显示随机帖子,因此这种访问方式仅包括用户的基本信息,例如姓名和电子邮件地址。 在本文中,您将初步了解我们如何在Takipi中实现此功能,如何在应用程序中使用3rd party登录,以及我们获得的一些见解,如果您决定集成,则可以节省一些宝贵的时间使用您自己的应用程序。

    在我们自己的小宇宙中,事实证明,我并不孤单,许多用户也有同样的感觉。 由于我们是开发人员工具初创公司,因此使用GitHub和Google的第三方登录非常合理。 除了为用户提供便利之外,使用第三方服务还可以增强其安全性。 由于Google和GitHub使用双重身份验证(2FA),您的应用程序可以“免费”享受这种安全级别。 在我们的例子中,我们已经启用了2FA,所以我想这使我们……3FA;)

    要查看其在实际中的工作方式,您可以查看我们内部用于测试的页面 。 完全可以使用,但是更新尚未在该站点上发布。 您在这里有一个难得的机会,成为第一个使用它的人。

    因此,提醒我OAuth 2.0又如何发展?

    OAuth登录流程如下:用户访问您的站点,单击“使用任何方式登录”按钮,然后重定向到权限页面。 权限页面来自Whatever™,当他们批准您要求的权限时,Whatever™向他们发送一个令牌,令牌将由他的浏览器发送到您的应用程序的后端。 拥有令牌后,将其发送回Whatever™进行验证并假设它已通过验证–您可以访问被授予权限的数据。

    Google OAuth2.0库

    谷歌权限

    Google的权限页面–为Takipi定制

    为了在我们的网站上实现第三方登录,我们使用了Google APIs Java 客户端库 。 在GitHub顶级Java项目使用前100个库中 ,还包含Jackson2,ProtoBuf和所有其他方便的实用程序。 对于我们来说,这是一个非常简单的选择,因为我们已经将该库用于其他目的,而且,老实说,谷歌库只是出现在……谷歌上的第一个结果。 准备好您的锡箔帽子

    使用Google实施登录

    这是旅途中的轻松部分; Google的说明文件很明确而且很明确。 由于它是他们自己的库,因此他们还抽象了过程的一部分并在后台对其进行处理,从而使其更易于实现。 第一步是在Google开发人员控制台上创建一个项目,您可以在其中注册应用程序并自定义权限页面。

    现在回到Java。 从本质上讲,该过程可以简化为几个简单的步骤,不会让人感到意外。 首先,我们构建并执行一个获取GoogleTokenResponse的请求,以便我们可以验证从用户那里获得的令牌。 然后,我们使用此响应来创建一个GoogleCredential ,让我们对其调用getAccessToken()并以JSON格式返回用户的信息:

    JsonFactory jsonFactory = new JacksonFactory();
    HttpTransport httpTransport = new NetHttpTransport();
    
    GoogleTokenResponse tokenResponse = new GoogleAuthorizationCodeTokenRequest(
                         httpTransport, jsonFactory,
                         /* Client ID and Secret */,
                         code, "postmessage").execute();
    
    GoogleCredential credential = new GoogleCredential.Builder()
                        .setJsonFactory(jsonFactory)
                        .setTransport(httpTransport)
                        .setClientSecrets(/* Client ID and Secret */).build()
                        .setFromTokenResponse(tokenResponse);
    
    Oauth2 oauth2 = new Oauth2.Builder(httpTransport, jsonFactory, credential).setApplicationName("YourAppName").build();
    Tokeninfo tokenInfo = oauth2.tokeninfo().setAccessToken(credential.getAccessToken()).execute();
    
    return oauth2.userinfo().get().execute();

    繁荣。 而已。 最好的建议是仅遵循官方文档。 在GitHub的一端,实现有些棘手。

    使用GitHub实施登录

    现在,我们意识到Google帮助我们在OAuth方面走了一些弯路,并在GoogleTokenResponse和GoogleCredential中使用了抽象。 使用GitHub,我们必须更接近原始协议。 与Google类似,在GitHub的开发人员应用程序屏幕上注册我们的应用程序时,我们可以自定义权限屏幕

    当我们到达实际的代码时,有3个主要问题使我们放慢了速度,而在文档中找不到。 解决方法如下:

    1.建立自己的请求流程

    在Google的情况下,只有5行代码,变成了19行,因此我们可以生成GitHub tokenResponse。 以下是您自己建立请求的方法:

    JsonFactory jsonFactory = new JacksonFactory();
    HttpTransport httpTransport = new NetHttpTransport();
    
    AuthorizationCodeFlow flow = new AuthorizationCodeFlow.Builder(
                     BearerToken.authorizationHeaderAccessMethod(),
                     httpTransport, jsonFactory,
                     new GenericUrl("https://github.com/login/oauth/access_token"),
                     new ClientParametersAuthentication(/* Client ID and Secret */),
                     /* Client ID */
                     "https://github.com/login/oauth/authorize").build();
    
    TokenResponse tokenResponse = flow
                     .newTokenRequest(code)
                     .setScopes(Collections.singletonList("user:email"))
                     .setRequestInitializer(new HttpRequestInitializer() {
                       @Override
                       public void initialize(HttpRequest request) throws IOException {
                            request.getHeaders().setAccept("application/json");
                       }
                     }).execute();

    由于某种原因,字符串是默认值

    麦吉佛

    注意到setAccept的更早的初始化方法吗? 这有点令人惊讶。 事实证明,您需要明确要求GitHub以JSON格式返回响应,否则您将以字符串格式获取响应。

    如果我们事先知道的话,它可以像MacGyver一样为我们节省一些时间。 但值得庆幸的是,我们找到了一些胶带和回形针来处理事情

    3.处理用于GitHub登录的用户电子邮件

    现在,一个GitHub用户可能有多个电子邮件地址,然后您必须选择用于自己目的的电子邮件地址。 因此,我们创建了一个getBestEmail方法,该方法可以对电子邮件数组进行排序(注意,它应该扩展ArrayList才能起作用)。 在对电子邮件数组进行排序之后,我们选择了可以找到的最佳选项:

    public class GithubEmails extends ArrayList<GithubEmail> {
      public GithubEmail getBestEmail() {
        if (isEmpty()) {
          return null;
        }
    
        Collections.sort(this, GithubEmail.bestEmailComparator);
    
        return get(0);
      }
    }

    那么最好的选择是什么? 我们从GitHub的响应中获得的此电子邮件数组中的每个字段都有一封电子邮件,一个经过验证的字段和一个主字段。 这是我们实现的排序比较器:

    public static final Comparator<? super GithubEmail> bestEmailComparator =
        new Comparator<GithubEmail>() {
          @Override
          public int compare(GithubEmail o1, GithubEmail o2) {
            if (o1.verified != o2.verified) {
              return (o1.verified ? -1 : 1);
            }
    
            if (o1.primary != o2.primary) {
              return (o1.primary ? -1 : 1);
            }
    
          return o1.email.compareTo(o2.email);
      }
    };

    因此,基本上您可以看到我们更喜欢经过验证的电子邮件和主要电子邮件。

    结论

    我们希望这篇文章可以帮助您将注意力集中在如何通过Google和GitHub的登录方法来访问OAuth和Java上。 虽然这是我们决定实现的方式,但是您可以使用其他方式和库来获得类似的结果。 我们很高兴听到您采用哪种方法,更喜欢哪种库并回答有关此实现的任何问题。

    如果您对我们的决定方式有任何意见或建议,请在下面的评论部分中告知我。 而且,如果您遇到麻烦,请分享您遇到的困难,我们将很乐于帮助和分享更多代码。

    Java / Scala开发人员? Takipi在代码中检测到所有异常和错误,并告诉您它们为什么发生。 只需1分钟即可安装: 尝试Takipi

    翻译自: https://jaxenter.com/how-to-implement-java-oauth-2-0-to-sign-in-with-github-and-google-117528.html

    java oauth2.0

    展开全文
  • jfinal-oauth2.0-server 基于, 参考实现了4.节描述的内容。 实现了OAuth 2.0定义了四种授权方式 授权码模式(authorization code): 先获取下次请求token的code,然后在带着code去请求token; 简化模式(implicit...
  • javaOAuth2.0实例后台Oracle数据表结构SQL
  • OAuth2.0实例demo

    热门讨论 2013-01-21 10:13:25
    基于OAuth2.0协议,在spring security oauth2.o的基础上搭建的 1、全部基于数据库存储用户信息,tokens 2、md5密码salt加密 3、https(没有配) 4、memcache(没有配) 如果3、4有需要可以联系我,大家一起讨论一下QQ...
  • Oauth2.0登录鉴权验证

    2017-02-24 11:25:36
    Oauth2.0,第三方登录鉴权验证教程。
  • Oauth2.0 该项目是SpringSecurity对Oauth2.0的实现,包含三个服务:认证授权服务端、客户端、资源服务端(可选)
  • OAuth2.0 使用到的jar包

    2017-11-06 13:56:21
    OAuth2.0 使 用 到 的 jar 包

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 14,735
精华内容 5,894
关键字:

javaoauth2.0

java 订阅