웹 기업 위챗을 통한 로그인 구현 (직원 정보 획득)

웹 애플리케이션에서 기업 위챗을 통한 자동 로그인 시스템 구현

기업 위챗의 자체 애플리케이션은 이미 배포된 작은 프로그램과 연동될 뿐만 아니라 웹사이트와도 연동이 가능합니다. 이 경우, 웹사이트가 기업 위챗에서 직접 열릴 때 자동 로그인이 필요할 수 있습니다. 기업 환경에서는 효율성이 중요하므로 계정과 비밀번호 입력 없이 기업 위챗의 직원 구조 정보를 통해 로그인하는 시스템이 필요합니다.

작은 프로그램 환경에서는 wx.qy.login API를 사용하여 코드를 얻어 직원 데이터를 요청할 수 있습니다. 하지만 웹 환경에서는 이러한 API를 직접 호출할 수 없으며, 기업 위챗이 제공하는 특정 인터페이스를 사용해야 합니다.

웹 환경을 위한 기업 위챗 인증 로그인 방법

OAuth2 인증 로그인

OAuth2.0 인터페이스를 통해 구성원의 UserId 신원 정보를 얻을 수 있으며, 이를 통해 기업 위챗 터미널에서 열린 웹페이지가 구성원의 신원 정보를 얻어 로그인 단계를 생략할 수 있습니다.

1단계: 웹 인증 링크 구성 및 코드 획득

// 기업 위챗 코드 획득 함수
fetchWechatWorkCode() {
  console.log('===================기업 위챗 사용자 코드 획득 중==========')
  
  // 기업 ID (corpId)
  const corporateId = 'xxxxx'; 
  // 자체 애플리케이션 ID (applicationId)
  const applicationId = 'xxxx'; 
  // 인증 성공 후 리디렉션될 경로 (신뢰할 수 있는 도메인에 미리 추가해야 함)
  const redirectUrl = encodeURI('yourdomain.com/home'); 
  // 상태 파라미터 (선택적)
  const stateParam = 'SECURE_STATE'; 
  
  // 인증 URL 생성
  const authorizationUrl = `https://open.weixin.qq.com/connect/oauth2/authorize?appid=${corporateId}&redirect_uri=${redirectUrl}&response_type=code&agentid=${applicationId}&scope=snsapi_base&state=${stateParam}#wechat_redirect`;
  
  // 페이지 리디렉션
  window.location.href = authorizationUrl;
}

이 방법을 통해 코드를 얻은 후, 이 코드를 백엔드에 전달하여 사용자 정보를 얻고 로그인을 처리할 수 있습니다.

주의사항:

  • 리디렉션 URL의 도메인은 기업 위챗 자체 애플리케이션의 신뢰할 수 있는 도메인으로 미리 설정해야 합니다.
  • 이 방법은 크로스 도메인 문제를 피할 수 있는 장점이 있습니다.

2단계: 코드를 사용하여 현재 접근 직원 정보 획득

// 액세스 토큰 획득
async getAccessToken() {
  try {
    const response = await fetch(`https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=${corporateId}&corpsecret=${applicationSecret}`);
    const data = await response.json();
    
    // 액세스 토큰 저장 (실제 프로덕션 환경에서는 백엔드에서 관리해야 함)
    sessionStorage.setItem('wechat_work_token', data.access_token);
    
    // 토큰 획득 성공 시 사용자 기본 정보 요청
    if (data.errcode === 0) {
      await getUserBasicInfo();
    }
  } catch (error) {
    console.error('액세스 토큰 획득 실패:', error);
  }
}

// 사용자 기본 정보 획득
async getUserBasicInfo() {
  try {
    const token = sessionStorage.getItem('wechat_work_token');
    const code = new URLSearchParams(window.location.search).get('code');
    
    const response = await fetch(`https://qyapi.weixin.qq.com/cgi-bin/user/getuserinfo?access_token=${token}&code=${code}`);
    const userData = await response.json();
    
    // 사용자 ID 저장
    if (userData.errcode === 0) {
      sessionStorage.setItem('employee_id', userData.UserId);
      // 상세 정보 요청
      await getDetailedUserInfo();
    }
  } catch (error) {
    console.error('사용자 기본 정보 획득 실패:', error);
  }
}

보안 고려사항:

  • 보안을 위해 액세스 토큰은 백엔드에서 관리해야 하며 프론트엔드에 노출해서는 안 됩니다.
  • 실제 프로덕션 환경에서는 코드를 백엔드로 전송하고, 기업 ID 및 애플리케이션 시크릿은 모두 백엔드에 구성해야 합니다.

3단계: 직원 상세 정보 획득

// 사용자 ID를 사용하여 상세 정보 획득
async getDetailedUserInfo() {
  try {
    const token = sessionStorage.getItem('wechat_work_token');
    const userId = sessionStorage.getItem('employee_id');
    
    const response = await fetch(`https://qyapi.weixin.qq.com/cgi-bin/user/get?access_token=${token}&userid=${userId}`);
    const detailedInfo = await response.json();
    
    // 상세 정보 활용 (예: UI 업데이트, 사용자 세션 설정 등)
    console.log('직원 상세 정보:', detailedInfo);
    
    // 여기서부터 로그인 처리 로직 구현
    // 예: 사용자 정보를 애플리케이션 세션에 저장
    processLogin(detailedInfo);
    
  } catch (error) {
    console.error('상세 정보 획득 실패:', error);
  }
}

// 로그인 처리 함수
function processLogin(userInfo) {
  // 애플리케이션 로그인 로직 구현
  // 예: 사용자 정보를 로컬 스토리지에 저장
  localStorage.setItem('user_profile', JSON.stringify(userInfo));
  
  // 메인 페이지로 리디렉션
  window.location.href = '/dashboard';
}

이 흐름을 통해 기업 위챗을 통한 웹 자동 로그인 시스템을 구현할 수 있습니다. 각 단계에서 발생할 수 있는 오류 처리와 보안 고려사항을 주의 깊게 다루어야 합니다.

태그: 기업 위챗 oauth2 웹 인증 자동 로그인 직원 정보 획득

6월 12일 00:48에 게시됨