Forráskód Böngészése

workweixin

企业扫描微信登录
MaxKey 3 éve
szülő
commit
e6802132cf

+ 5 - 1
maxkey-authentications/maxkey-authentication-social/src/main/java/org/maxkey/authn/support/socialsignon/AbstractSocialSignOnEndpoint.java

@@ -24,6 +24,7 @@ import org.maxkey.authn.AbstractAuthenticationProvider;
 import org.maxkey.authn.support.socialsignon.service.SocialSignOnProvider;
 import org.maxkey.authn.support.socialsignon.service.SocialSignOnProviderService;
 import org.maxkey.authn.support.socialsignon.service.SocialsAssociateService;
+import org.maxkey.configuration.ApplicationConfig;
 import org.maxkey.web.WebContext;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -77,6 +78,9 @@ public class AbstractSocialSignOnEndpoint {
 	@Autowired
     @Qualifier("authenticationProvider")
 	AbstractAuthenticationProvider authenticationProvider ;
+	
+	@Autowired
+	ApplicationConfig applicationConfig;
  	
   	protected AuthRequest buildAuthRequest(String provider){
   		
@@ -84,7 +88,7 @@ public class AbstractSocialSignOnEndpoint {
 		_logger.debug("socialSignOn Provider : "+socialSignOnProvider);
 		
 		if(socialSignOnProvider!=null){
-			authRequest=socialSignOnProviderService.getAuthRequest(provider);
+			authRequest=socialSignOnProviderService.getAuthRequest(provider,applicationConfig);
 			WebContext.setAttribute(SOCIALSIGNON_OAUTH_SERVICE_SESSION, authRequest);
 			WebContext.setAttribute(SOCIALSIGNON_PROVIDER_SESSION, socialSignOnProvider);
 			return authRequest;

+ 26 - 11
maxkey-authentications/maxkey-authentication-social/src/main/java/org/maxkey/authn/support/socialsignon/SocialSignOnEndpoint.java

@@ -22,7 +22,9 @@ package org.maxkey.authn.support.socialsignon;
 
 import javax.servlet.http.HttpServletRequest;
 
+import org.maxkey.authn.support.socialsignon.service.SocialSignOnProvider;
 import org.maxkey.authn.support.socialsignon.service.SocialsAssociate;
+import org.maxkey.configuration.ApplicationConfig;
 import org.maxkey.constants.ConstantsLoginType;
 import org.maxkey.web.WebContext;
 import org.slf4j.Logger;
@@ -33,10 +35,9 @@ import org.springframework.stereotype.Controller;
 import org.springframework.web.bind.annotation.PathVariable;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.ResponseBody;
 import org.springframework.web.servlet.ModelAndView;
 
-import me.zhyd.oauth.utils.AuthStateUtils;
-
 /**
  * @author Crystal.Sea
  *
@@ -46,25 +47,26 @@ import me.zhyd.oauth.utils.AuthStateUtils;
 public class SocialSignOnEndpoint  extends AbstractSocialSignOnEndpoint{
 	final static Logger _logger = LoggerFactory.getLogger(SocialSignOnEndpoint.class);
 	
-    public  ModelAndView socialSignOnAuthorize(String provider){
+    public  ModelAndView socialSignOnAuthorize(HttpServletRequest request,String provider){
     	_logger.debug("SocialSignOn provider : "+provider);
-    	String authorizationUrl=buildAuthRequest(provider).authorize(AuthStateUtils.createState());
+    	String authorizationUrl=buildAuthRequest(provider).authorize(request.getSession().getId());
 		_logger.debug("authorize SocialSignOn : "+authorizationUrl);
 		return WebContext.redirect(authorizationUrl);
     }
     
 	@RequestMapping(value={"/authorize/{provider}"}, method = RequestMethod.GET)
-	public ModelAndView authorize(@PathVariable String provider) {
+	public ModelAndView authorize(HttpServletRequest request,
+									@PathVariable String provider) {
 		WebContext.setAttribute(SOCIALSIGNON_TYPE_SESSION, SOCIALSIGNON_TYPE.SOCIALSIGNON_TYPE_LOGON);
-		return socialSignOnAuthorize(provider);
+		return socialSignOnAuthorize(request,provider);
 	}
 	
 	@RequestMapping(value={"/bind/{provider}"}, method = RequestMethod.GET)
 	public ModelAndView bind(HttpServletRequest request,
-				@PathVariable String provider) {
+								@PathVariable String provider) {
 		WebContext.setAttribute(SOCIALSIGNON_SESSION_REDIRECT_URI, request.getParameter(SOCIALSIGNON_REDIRECT_URI));
 		WebContext.setAttribute(SOCIALSIGNON_TYPE_SESSION, SOCIALSIGNON_TYPE.SOCIALSIGNON_TYPE_BIND);
-		return socialSignOnAuthorize(provider);
+		return socialSignOnAuthorize(request,provider);
 	}
 	
 	@RequestMapping(value={"/unbind/{provider}"}, method = RequestMethod.GET)
@@ -88,10 +90,23 @@ public class SocialSignOnEndpoint  extends AbstractSocialSignOnEndpoint{
 	}
 	
 	@RequestMapping(value={"/authorize/{provider}/{appid}"}, method = RequestMethod.GET)
-	public ModelAndView authorize2AppId(@PathVariable("provider") String provider,
-			@PathVariable("appid") String appid) {
+	public ModelAndView authorize2AppId(HttpServletRequest request,
+										@PathVariable("provider") String provider,
+										@PathVariable("appid") String appid) {
 		WebContext.setAttribute(SOCIALSIGNON_SESSION_REDIRECT_URI, "/authorize/"+appid);
-		return authorize(provider);
+		return authorize(request,provider);
+	}
+	
+	@RequestMapping(value={"/scanqrcode/{provider}"}, method = RequestMethod.GET)
+	@ResponseBody
+	public SocialSignOnProvider scanQRCode(
+							HttpServletRequest request,
+							@PathVariable("provider") String provider) {
+		socialSignOnAuthorize(request,provider);
+		SocialSignOnProvider socialSignOnProvider = socialSignOnProviderService.get(provider);
+		socialSignOnProvider.setState(request.getSession().getId());
+		socialSignOnProvider.setRedirectUri(applicationConfig.getServerPrefix()+ "/logon/oauth20/callback/"+provider);
+		return socialSignOnProvider;
 	}
 	
 	

+ 15 - 5
maxkey-authentications/maxkey-authentication-social/src/main/java/org/maxkey/authn/support/socialsignon/service/JdbcSocialsAssociateService.java

@@ -1,6 +1,6 @@
 /*
  * Copyright [2020] [MaxKey of copyright http://www.maxkey.top]
- * 
+ *  
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at
@@ -33,24 +33,34 @@ public class JdbcSocialsAssociateService   implements SocialsAssociateService{
 	
 	private static final String DEFAULT_DEFAULT_INSERT_STATEMENT = "INSERT INTO  MXK_SOCIALS_ASSOCIATE(ID, UID , USERNAME , PROVIDER , SOCIALUID , ACCESSTOKEN , SOCIALUSERINFO , EXATTRIBUTE )VALUES( ? , ? , ? , ? , ?, ? , ? , ?)";
 	
-	private static final String DEFAULT_DEFAULT_SIGNON_SELECT_STATEMENT = "SELECT ID, UID , USERNAME , PROVIDER , SOCIALUID , ACCESSTOKEN , SOCIALUSERINFO , EXATTRIBUTE , CREATEDDATE , UPDATEDDATE  FROM MXK_SOCIALS_ASSOCIATE WHERE PROVIDER = ?  AND SOCIALUID = ?";
+	private static final String DEFAULT_DEFAULT_INSERT_STATEMENT_ORACLE = "INSERT INTO  MXK_SOCIALS_ASSOCIATE(ID, \"UID\" , USERNAME , PROVIDER , SOCIALUID , ACCESSTOKEN , SOCIALUSERINFO , EXATTRIBUTE )VALUES( ? , ? , ? , ? , ?, ? , ? , ?)";
+	
+	private static final String DEFAULT_DEFAULT_SIGNON_SELECT_STATEMENT = "SELECT ID, \"UID\" , USERNAME , PROVIDER , SOCIALUID , ACCESSTOKEN , SOCIALUSERINFO , EXATTRIBUTE , CREATEDDATE , UPDATEDDATE  FROM MXK_SOCIALS_ASSOCIATE WHERE PROVIDER = ?  AND SOCIALUID = ?";
 	
-	private static final String DEFAULT_DEFAULT_BIND_SELECT_STATEMENT = "SELECT ID, UID , USERNAME , PROVIDER , SOCIALUID , ACCESSTOKEN , SOCIALUSERINFO , EXATTRIBUTE , CREATEDDATE , UPDATEDDATE  FROM MXK_SOCIALS_ASSOCIATE WHERE UID = ?" ;
+	private static final String DEFAULT_DEFAULT_BIND_SELECT_STATEMENT = "SELECT ID, \"UID\" , USERNAME , PROVIDER , SOCIALUID , ACCESSTOKEN , SOCIALUSERINFO , EXATTRIBUTE , CREATEDDATE , UPDATEDDATE  FROM MXK_SOCIALS_ASSOCIATE WHERE \"UID\" = ?" ;
 	
-	private static final String DEFAULT_DEFAULT_DELETE_STATEMENT = "DELETE FROM  MXK_SOCIALS_ASSOCIATE WHERE  UID = ? AND PROVIDER = ?";
+	private static final String DEFAULT_DEFAULT_DELETE_STATEMENT = "DELETE FROM  MXK_SOCIALS_ASSOCIATE WHERE  \"UID\" = ? AND PROVIDER = ?";
 	
 	private static final String DEFAULT_DEFAULT_UPDATE_STATEMENT= "UPDATE MXK_SOCIALS_ASSOCIATE  SET ACCESSTOKEN  = ? , SOCIALUSERINFO = ? , EXATTRIBUTE = ? ,UPDATEDDATE = ?  WHERE ID = ?";
 
 	private final JdbcTemplate jdbcTemplate;
 	
+	private String jdbcType;
+	
 	public JdbcSocialsAssociateService(JdbcTemplate jdbcTemplate) {
 		this.jdbcTemplate=jdbcTemplate;	
+		try {
+    		jdbcType = jdbcTemplate.getDataSource().getConnection().getMetaData().getDatabaseProductName();
+		} catch (Exception e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
 	}
 
 	@Override
 	public boolean insert(SocialsAssociate socialsAssociate) {
 		socialsAssociate.setId(socialsAssociate.generateId());
-		jdbcTemplate.update(DEFAULT_DEFAULT_INSERT_STATEMENT, 
+		jdbcTemplate.update("Oracle".equals(jdbcType)?DEFAULT_DEFAULT_INSERT_STATEMENT_ORACLE:DEFAULT_DEFAULT_INSERT_STATEMENT, 
 				new Object[] { 
 					socialsAssociate.getId(),
 					socialsAssociate.getUid(),

+ 55 - 30
maxkey-authentications/maxkey-authentication-social/src/main/java/org/maxkey/authn/support/socialsignon/service/SocialSignOnProvider.java

@@ -28,14 +28,15 @@ public class SocialSignOnProvider {
 	private String icon;
 	private String clientId;
 	private String clientSecret;
+	private String redirectUri;
+	private String agentId;
 	private String accountId;
 	private String bindTime;
 	private String unBindTime;
 	private String lastLoginTime;
+	private String state;
 	private int sortOrder;
 	
-	
-	
 	private boolean userBind;
 	
 	/**
@@ -134,34 +135,58 @@ public class SocialSignOnProvider {
         this.lastLoginTime = lastLoginTime;
     }
 
-    @Override
-    public String toString() {
-        StringBuilder builder = new StringBuilder();
-        builder.append("SocialSignOnProvider [provider=");
-        builder.append(provider);
-        builder.append(", providerName=");
-        builder.append(providerName);
-        builder.append(", icon=");
-        builder.append(icon);
-        builder.append(", clientId=");
-        builder.append(clientId);
-        builder.append(", clientSecret=");
-        builder.append(clientSecret);
-        builder.append(", accountId=");
-        builder.append(accountId);
-        builder.append(", bindTime=");
-        builder.append(bindTime);
-        builder.append(", unBindTime=");
-        builder.append(unBindTime);
-        builder.append(", lastLoginTime=");
-        builder.append(lastLoginTime);
-        builder.append(", sortOrder=");
-        builder.append(sortOrder);
-        builder.append(", userBind=");
-        builder.append(userBind);
-        builder.append("]");
-        return builder.toString();
-    }
+    public String getRedirectUri() {
+		return redirectUri;
+	}
+
+	public void setRedirectUri(String redirectUri) {
+		this.redirectUri = redirectUri;
+	}
+
+	public String getAgentId() {
+		return agentId;
+	}
+
+	public void setAgentId(String agentId) {
+		this.agentId = agentId;
+	}
+
+	public String getState() {
+		return state;
+	}
+
+	public void setState(String state) {
+		this.state = state;
+	}
+
+	@Override
+	public String toString() {
+		StringBuilder builder = new StringBuilder();
+		builder.append("SocialSignOnProvider [provider=");
+		builder.append(provider);
+		builder.append(", providerName=");
+		builder.append(providerName);
+		builder.append(", clientId=");
+		builder.append(clientId);
+		builder.append(", clientSecret=");
+		builder.append(clientSecret);
+		builder.append(", agentId=");
+		builder.append(agentId);
+		builder.append(", accountId=");
+		builder.append(accountId);
+		builder.append(", bindTime=");
+		builder.append(bindTime);
+		builder.append(", unBindTime=");
+		builder.append(unBindTime);
+		builder.append(", lastLoginTime=");
+		builder.append(lastLoginTime);
+		builder.append(", sortOrder=");
+		builder.append(sortOrder);
+		builder.append(", userBind=");
+		builder.append(userBind);
+		builder.append("]");
+		return builder.toString();
+	}
 	
 	
 

+ 4 - 3
maxkey-authentications/maxkey-authentication-social/src/main/java/org/maxkey/authn/support/socialsignon/service/SocialSignOnProviderService.java

@@ -20,6 +20,7 @@ package org.maxkey.authn.support.socialsignon.service;
 import java.util.HashMap;
 import java.util.List;
 
+import org.maxkey.configuration.ApplicationConfig;
 import org.maxkey.web.WebContext;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -43,12 +44,12 @@ public class SocialSignOnProviderService{
 		return socialSignOnProviderMaps.get(provider);
 	}
 	
-	public AuthRequest  getAuthRequest(String provider) {
+	public AuthRequest  getAuthRequest(String provider,ApplicationConfig applicationConfig) {
 		AuthRequest authRequest = null;
 		AuthConfig authConfig = AuthConfig.builder()
 				.clientId(this.get(provider).getClientId())
 				.clientSecret(this.get(provider).getClientSecret())
-				.redirectUri(WebContext.getHttpContextPath()+ "/logon/oauth20/callback/"+provider)
+				.redirectUri(applicationConfig.getServerPrefix()+ "/logon/oauth20/callback/"+provider)
 				.build();
 		
 		if(provider.equalsIgnoreCase("WeChatOpen")) {
@@ -99,7 +100,7 @@ public class SocialSignOnProviderService{
             authRequest = new AuthToutiaoRequest(authConfig);
         }else if(provider.equalsIgnoreCase("WeChatQyQrcode")) {
             authRequest = new AuthWeChatEnterpriseQrcodeRequest(authConfig);
-        }else if(provider.equalsIgnoreCase("WeChatQyWeb")) {
+        }else if(provider.equalsIgnoreCase("workweixin")) {
             authRequest = new AuthWeChatEnterpriseWebRequest(authConfig);
         }
 		

+ 4 - 0
maxkey-authentications/maxkey-authentication-social/src/main/java/org/maxkey/autoconfigure/SocialSignOnAutoConfiguration.java

@@ -57,6 +57,8 @@ public class SocialSignOnAutoConfiguration implements InitializingBean {
             String clientId=applicationProperty.getProperty("maxkey.socialsignon."+provider+".client.id");
             String clientSecret=applicationProperty.getProperty("maxkey.socialsignon."+provider+".client.secret");
             String sortOrder = applicationProperty.getProperty("maxkey.socialsignon."+provider+".sortorder");
+            String agentId = applicationProperty.getProperty("maxkey.socialsignon."+provider+".agent.id");
+            
             SocialSignOnProvider socialSignOnProvider = new SocialSignOnProvider();
             socialSignOnProvider.setProvider(provider);
             socialSignOnProvider.setProviderName(providerName);
@@ -64,6 +66,8 @@ public class SocialSignOnAutoConfiguration implements InitializingBean {
             socialSignOnProvider.setClientId(clientId);
             socialSignOnProvider.setClientSecret(clientSecret);
             socialSignOnProvider.setSortOrder(Integer.valueOf(sortOrder));
+            socialSignOnProvider.setAgentId(agentId);
+            
             _logger.debug("socialSignOnProvider " + socialSignOnProvider.getProvider() 
             								+ "(" + socialSignOnProvider.getProviderName()+")");
             _logger.trace("socialSignOnProvider " + socialSignOnProvider);

+ 9 - 0
maxkey-web-maxkey/src/main/resources/application-http.properties

@@ -371,6 +371,15 @@ maxkey.socialsignon.wechatopen.client.id=ee6fdc484b3398d17e7
 maxkey.socialsignon.wechatopen.client.secret=7a5faccdbad
 maxkey.socialsignon.wechatopen.account.id=id
 maxkey.socialsignon.wechatopen.sortorder=2
+#work weixin
+maxkey.socialsignon.workweixin.provider=workweixin
+maxkey.socialsignon.workweixin.provider.name=\u4F01\u4E1A\u5fae\u4fe1
+maxkey.socialsignon.workweixin.icon=images/social/wechat.png
+maxkey.socialsignon.workweixin.client.id=wx00d052e8f417f8f9
+maxkey.socialsignon.workweixin.client.secret=lIy40iP0z4D65eJaWDNoe-vSlttmqY2WGJBygbM0TlY
+maxkey.socialsignon.workweixin.agent.id=1000002
+maxkey.socialsignon.workweixin.account.id=id
+maxkey.socialsignon.workweixin.sortorder=2
 #sina weibo
 maxkey.socialsignon.sinaweibo.provider=sinaweibo
 maxkey.socialsignon.sinaweibo.provider.name=\u65b0\u6d6a\u5fae\u535a

+ 9 - 0
maxkey-web-maxkey/src/main/resources/application-https.properties

@@ -363,6 +363,15 @@ maxkey.socialsignon.wechatopen.client.id=ee6fdc484b3398d17e7
 maxkey.socialsignon.wechatopen.client.secret=7a5faccdbad
 maxkey.socialsignon.wechatopen.account.id=id
 maxkey.socialsignon.wechatopen.sortorder=2
+#work weixin
+maxkey.socialsignon.workweixin.provider=workweixin
+maxkey.socialsignon.workweixin.provider.name=\u4F01\u4E1A\u5fae\u4fe1
+maxkey.socialsignon.workweixin.icon=images/social/wechat.png
+maxkey.socialsignon.workweixin.client.id=wx00d052e8f417f8f9
+maxkey.socialsignon.workweixin.client.secret=lIy40iP0z4D65eJaWDNoe-vSlttmqY2WGJBygbM0TlY
+maxkey.socialsignon.workweixin.agent.id=1000002
+maxkey.socialsignon.workweixin.account.id=id
+maxkey.socialsignon.workweixin.sortorder=2
 #sina weibo
 maxkey.socialsignon.sinaweibo.provider=sinaweibo
 maxkey.socialsignon.sinaweibo.provider.name=\u65b0\u6d6a\u5fae\u535a