애플 릿 개발 실현 accesstoken 통합 관리
8211 단어 애플 릿access token통일 적 으로 관리 하 다
배경
공공 플랫폼 의 API 기능 을 사용 한 개발 자 에 게 accesstoken 은 절대 낯 설 지 않 습 니 다.마치 집 문 을 여 는 열쇠 처럼 들 고 있 으 면 대중 플랫폼 의 대부분 API 기능 을 사용 할 수 있 습 니 다.따라서 개발 자 에 게 accesstoken 의 사용 방식 은 특히 중요 하 다.일상적인 API 인터페이스 운영 에서 왜 나의 access토 큰 이 갑자기 불법 이 야?왜 방금 받 은 accesstoken,10min 쓰 고 기한 이 지 났 어 요?이러한 의문 에 대하 여 우 리 는 access 를 제공 합 니 다.token 의 디자인 방안 은 개발 자가 accesstoken 사용 방식 에 대한 이해.
access 에 대하 여token 의 획득 은 공공 플랫폼 의 공식 문 서 를 참고 할 수 있 습 니 다.auth.getAccessToken,액세스 토 큰 가 져 오기
2.accesstoken 의 내부 디자인
2.1 access_token 의 실효 성
알다 시 피 accesstoken 은 appid 와 appsicret 를 통 해 생 성 됩 니 다.내부 설계 의 절 차 는 다음 과 같다.
(1)개발 자가 https 요청 방식:GEThttps://API.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET를 통 해 appid 및 appsecret 의 인 자 를 입력 합 니 다.
(2)공공 플랫폼 배경 에서 appid 와 해시(appsicret)가 저장 소 와 일치 하 는 지 확인 합 니 다.일치 하면 현재 시간 스탬프 와 결합 하여 새로운 access 를 생 성 합 니 다.token。
(3)새로운 access 생 성token 과 동시에 오래된 accesstoken 의 만 료 시간 스탬프 는 현재 시간 스탬프 로 업 데 이 트 됩 니 다.
(4)새로운 access 로 돌아 가기개발 자
여기 서 그림 의 방식 으로 신 구 token 교체 과정 을 설명 합 니 다.
위의 그림 에서 주의해 야 할 몇 가지 점:
(1)공공 플랫폼 저장 층 은 신 구 두 access 만 저장 합 니 다.token 은 개발 자가 3 번 의 인 터 페 이 스 를 중복 호출 한다 고 가정 하면 최초의 accesstoken 은 즉시 효력 을 상실 합 니 다.
(2)새로운 access 를 요청 하지만token 후,오래된 accesstoken 만 료 시간 은 현재 시간 으로 업데이트 되 지만 즉시 효력 을 잃 지 않 습 니 다.원 리 는[2.2 access 를 참고 하 십시오.token 의 점차 실효 성]
(3)정보 안전 을 고려 하여 공공 플랫폼 은 appcret 를 명문 으로 저장 하지 않 고 appid 와 appcret 의 해시 값 만 저장 합 니 다.따라서 개발 자 는 앱 시 크 릿 을 잘 보관 해 야 한다.앱 시 크 릿 이 유출 된 것 으로 의심 되 는 경우,즉시 mp.weixin.qq.com 에 로그 인하 여 앱 시 크 릿 을 리 셋 해 야 합 니 다.
2.2 access_token 의 점진 적 실효 성
부터[accesstoken 의 실효 성]알 겠 습 니 다.개발 자가 새로운 access 를 요청 할 때token 시,오래된 accesstoken 만 료 시간 은 현재 시간 으로 업데이트 되 지만 이 때 는 즉시 효력 을 잃 지 않 습 니 다.왜냐하면 공공 플랫폼 은[5 분 의 신 구 access 를 제공 하기 때 문 입 니 다.token 교체 버퍼 시간],그래서 access 라 고도 합 니 다.token
의 점차 실효 성.
실현 의 원 리 는:
위의 그림 에서 주의해 야 할 몇 가지 점:
(1)장치 시간 동기 화 차이 가 존재 하기 때문에 개발 자가 오래된 access 를 가지 고 있 을 수 있 습 니 다.token 은 API 인 터 페 이 스 를 요청 합 니 다.일부 요청 이 성공 하고 일부 요청 이 실패 한 경우 개발 자 에 게 새로운 access 를 가 져 오 는 것 을 권장 합 니 다.token 후 가능 한 한 빨리 사용 하 세 요.
(2)두 개의 그림 을 이해 함으로써 개발 자 에 게 accesstoken 은 상당히 관건 적 이 고 함부로 조절 할 수 없 는 인터페이스 입 니 다.개발 자 에 게 access 를 통일 적 으로 관리 하 는 것 을 권장 합 니 다.token,여러 번 요청 으로 accesstoken 실효.
3.accesstoken 의 통일 관리
access_token
의 업 데 이 트 를 정시 트리거 에 맡 겨 사용access_token
의 인터페이스 호출 을 완료 하고 전송 되 지 않 습 니 다access_token
.백 엔 드 에 맡 겨 데이터베이스 에서 읽 습 니 다.다음은 애플 릿 클 라 우 드 함수 단 통일 관리
access_token
코드 를 예 로 들 어 보 여 줍 니 다.index.js 요청 및 업데이트
access_token
다른 쪽 에 있 으 면 들 어 와 야 합 니 다APPID
const cloud = require('wx-server-sdk')
cloud.init({
env: cloud.DYNAMIC_CURRENT_ENV
})
const timeutil = require('./timeutil');
//
const APPSECRET = ''
const axios = require('axios');
const db = cloud.database();
//
const CONFIG = 'cloud-token';
// TOKEN
const URL = 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={APPID}&secret={APPSECRET}'
function getAccessToken(APPID,APPSECRET){
let url = URL;
url = url.replace('{APPID}',APPID)
url = url.replace('{APPSECRET}',APPSECRET)
return new Promise(function(resolve,reject){
axios.get(url).then(function (response) {
console.log(response);
resolve(response)
})
.catch(function (error) {
console.log(error);
reject(error)
});
})
}
//
exports.main = async (event, context) => {
const wxContext = cloud.getWXContext()
// APPID
var APPID = wxContext.APPID;
return new Promise(function(resolve,reject){
getAccessToken(APPID,APPSECRET).then(async res=>{
console.log(res)
let access_token = res.data.access_token;
let ans = await db.collection(CONFIG).doc('access_token').set({
data:{
value:access_token,
_updateTime:timeutil.TimeCode()
}
})
resolve(ans)
})
})
}
config.json 정시 트리거시간 당 한번 촉발
{
"triggers": [
{
"name": "myTrigger",
"type": "timer",
"config": "0 0 * * * * *"
}
]
}
timeutil.js 시간 도구 클래스
function TimeCode() {
var date = new Date();
var year = date.getFullYear()
var month = date.getMonth() + 1
var day = date.getDate()
var hour = date.getHours()
var minute = date.getMinutes()
var second = date.getSeconds()
return [year, month, day].map(formatNumber).join('-') + ' ' + [hour, minute, second].map(formatNumber).join(':')
}
//
function _formatTime(time) {
var date = time.getFullYear() + ' ' + time.getMonth() + ' ' + time.getDate() + ' '
var ftime = time.getHours() + ' ' + time.getMinutes() + ' ' + time.getSeconds() + ' '
return date + ftime;
}
function TimeCodeYmd(){
var date = new Date();
var year = date.getFullYear()
var month = date.getMonth() + 1
var day = date.getDate()
return [year, month, day].map(formatNumber).join('-');
}
function formatNumber(n) {
n = n.toString()
return n[1] ? n : '0' + n
}
module.exports={
TimeCode,
TimeCodeYmd
}
다른 클 라 우 드 함수 에서access_token
에 사용 되 는 곳 은 데이터 베 이 스 를 조회 하여 얻 을 수 있 고 이들 은 데이터 베 이 스 를 통 해 논리 적 결합 을 할 수 있 습 니 다.access_token 조회 사용
const TOKEN = 'cloud-token';
// access_token
try {
let tres = await db.collection(TOKEN).doc('access_token').get();
access_token = tres.data.value;
console.log(access_token)
} catch (error) {
console.log('-- token --')
return {
errCode:-1,
errMsg:' TOKEN '
}
}
참고 문서【1】 공용 플랫폼/애플 릿 서버 API 의 accesstoken 의 내부 디자인|위 챗 오픈 커 뮤 니 티(qq.com)
【2】 auth.getAccessToken|위 챗 오픈 문서(qq.com)
【3】 위 챗 애플 릿 개발 기법 총화(3)-클 라 우 드 개발 시효 데이터 리 셋 및 저장(accesstoken 등)-Kindear-블 로그 원(cnblogs.com)
애플 릿 개발 실현 accesstoken 통일 관리 글 은 여기까지 입 니 다.더 많은 애플 릿 accesstoken 통합 관리 콘 텐 츠 는 저희 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 도 많은 응원 부 탁 드 리 겠 습 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
애플 릿 이미지 새로 고침, nginx 재 작성 url 제거 인자이전에 nginx 로 이미지 서버 를 만 들 었 는데 전단 에 작은 프로그램 을 사 용 했 습 니 다. 작은 프로그램 이 출시 된 후에 그림 이 새로 고침 되 지 않 는 것 을 발 견 했 습 니 다. 조사 한 결과 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.