larksuite / larksuite/oapi-sdk-java

卡片消息回调代码有问题,设置了密码和token之后配置不了,同样的密码和token,事件回调可以通过验证,卡片订阅不能通过验证,事件回调的地址放到卡片订阅也可以通过。

Aperta
#116 1 commento 0 reazioni 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

Lingua principale
Java
Stelle
310
Fork
115
Metriche di merge delle PR
Nessuna PR unita negli ultimi 30g

Descrizione

如题。我们在使用事件回调和卡片消息回调时同样的key和token,一个能通过校验,一个不能。通过排查,发现两个方法SDK的签名验证逻辑的代码不一样,一个用的是key,一个用的token

` private boolean verifySign(EventReq eventReq) throws NoSuchAlgorithmException {
if (Strings.isEmpty(verificationToken)) {
return true;
}

    String cipherEventJsonStr = new String(eventReq.getBody(), StandardCharsets.UTF_8);
    String timestamp, nonce, sourceSign, targetSign;
    timestamp = eventReq.getHeaderFirstValue(Constants.X_LARK_REQUEST_TIMESTAMP);
    nonce = eventReq.getHeaderFirstValue(Constants.X_LARK_REQUEST_NONCE);
    sourceSign = eventReq.getHeaderFirstValue(Constants.X_LARK_SIGNATURE);
    targetSign = calculateSignature(timestamp, nonce, verificationToken, cipherEventJsonStr);
    return targetSign.equals(sourceSign);
}`

`private boolean verifySign(EventReq eventReq) throws NoSuchAlgorithmException {
if (Strings.isEmpty(encryptKey)) {
return true;
}

    String cipherEventJsonStr = new String(eventReq.getBody(), StandardCharsets.UTF_8);
    String timestamp, nonce, sourceSign, targetSign;
    timestamp = eventReq.getHeaderFirstValue(Constants.X_LARK_REQUEST_TIMESTAMP);
    nonce = eventReq.getHeaderFirstValue(Constants.X_LARK_REQUEST_NONCE);
    sourceSign = eventReq.getHeaderFirstValue(Constants.X_LARK_SIGNATURE);
    targetSign = calculateSignature(timestamp, nonce, encryptKey, cipherEventJsonStr);
    return targetSign.equals(sourceSign);
}`

使用key的可以通过校验,使用token的不能通过。我理解两个事件应该是一样的处理鉴权的逻辑,有人能帮忙看看吗?

Guida per i contributori

Nessuna guida per i contributori indicizzata per questo repository

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Direzione di ricerca

Inizia dai due metodi verifySign(EventReq eventReq) mostrati nell’issue e confronta il loro utilizzo di verificationToken, encryptKey e calculateSignature. Riproduci la validazione con la stessa chiave e lo stesso token per le callback degli eventi e le sottoscrizioni alle schede; il lavoro è completato quando entrambi i tipi di callback superano costantemente la verifica della firma con una configurazione corrispondente.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Valutazione

Stack tecnologico
java
Ambito
api, authentication
Tipo di issue
Bug
Difficoltà
3/5
Tempo stimato
1-2 giorni
Stato di attività
Ferma
Chiarezza
Abbastanza chiara
Idoneità per principianti
35/100

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.