• spring security 5.x Provider


    Provider

    spring-security-config模块下
    org.springframework.security.config.oauth2.client.CommonOAuth2Provider.class 包括google、github等

    public enum CommonOAuth2Provider {
        GOOGLE {
            public Builder getBuilder(String registrationId) {
                Builder builder = this.getBuilder(registrationId, ClientAuthenticationMethod.BASIC, "{baseUrl}/{action}/oauth2/code/{registrationId}");
                builder.scope(new String[]{"openid", "profile", "email"});
                builder.authorizationUri("https://accounts.google.com/o/oauth2/v2/auth");
                builder.tokenUri("https://www.googleapis.com/oauth2/v4/token");
                builder.jwkSetUri("https://www.googleapis.com/oauth2/v3/certs");
                builder.userInfoUri("https://www.googleapis.com/oauth2/v3/userinfo");
                builder.userNameAttributeName("sub");
                builder.clientName("Google");
                return builder;
            }
        },
        GITHUB {
            public Builder getBuilder(String registrationId) {
                Builder builder = this.getBuilder(registrationId, ClientAuthenticationMethod.BASIC, "{baseUrl}/{action}/oauth2/code/{registrationId}");
                builder.scope(new String[]{"read:user"});
                builder.authorizationUri("https://github.com/login/oauth/authorize");
                builder.tokenUri("https://github.com/login/oauth/access_token");
                builder.userInfoUri("https://api.github.com/user");
                builder.userNameAttributeName("id");
                builder.clientName("GitHub");
                return builder;
            }
        },
        FACEBOOK {
            public Builder getBuilder(String registrationId) {
                Builder builder = this.getBuilder(registrationId, ClientAuthenticationMethod.POST, "{baseUrl}/{action}/oauth2/code/{registrationId}");
                builder.scope(new String[]{"public_profile", "email"});
                builder.authorizationUri("https://www.facebook.com/v2.8/dialog/oauth");
                builder.tokenUri("https://graph.facebook.com/v2.8/oauth/access_token");
                builder.userInfoUri("https://graph.facebook.com/me?fields=id,name,email");
                builder.userNameAttributeName("id");
                builder.clientName("Facebook");
                return builder;
            }
        },
        OKTA {
            public Builder getBuilder(String registrationId) {
                Builder builder = this.getBuilder(registrationId, ClientAuthenticationMethod.BASIC, "{baseUrl}/{action}/oauth2/code/{registrationId}");
                builder.scope(new String[]{"openid", "profile", "email"});
                builder.userNameAttributeName("sub");
                builder.clientName("Okta");
                return builder;
            }
        };
    
        private static final String DEFAULT_REDIRECT_URL = "{baseUrl}/{action}/oauth2/code/{registrationId}";
    
        private CommonOAuth2Provider() {
        }
    
        protected final Builder getBuilder(String registrationId, ClientAuthenticationMethod method, String redirectUri) {
            Builder builder = ClientRegistration.withRegistrationId(registrationId);
            builder.clientAuthenticationMethod(method);
            builder.authorizationGrantType(AuthorizationGrantType.AUTHORIZATION_CODE);
            builder.redirectUriTemplate(redirectUri);
            return builder;
        }
    
        public abstract Builder getBuilder(String var1);
    }
    
    
    AuthorizationEndpoint

    spring-security-oauth2模块
    orgspringframeworksecurityoauth2providerendpoint包下定义了各种默认的处理器,即controller

    org.springframework.security.oauth2.provider.endpoint.AuthorizationEndpoint #授权逻辑
    org.springframework.security.oauth2.provider.endpoint.TokenEndpoint #获取令牌
    org.springframework.security.oauth2.provider.endpoint.CheckTokenEndpoint#checkToken #检查令牌
    org.springframework.security.oauth2.provider.endpoint.WhitelabelApprovalEndpoint #白名单
    
  • 相关阅读:
    cve-2019-1388复现+烂土豆+CVE-2019-0803
    子父域控双向信任
    黄金票据 白银票据 ms14068
    joomla3.4.6 rce 分析与复现
    主键索引跟唯一索引的区别
    hash 跟B+tree的区别
    MySQL数据库有几种索引?分别是什么?
    什么是事务?事务有什么特性?分别是什么?
    MySQL建立索引的原则
    什么是索引?索引的作用是什么?
  • 原文地址:https://www.cnblogs.com/jinit/p/14194669.html
Copyright © 2020-2023  润新知