最近在踩基於 釘釘開放平臺進行開發的坑,而後在進行身份認證時遇到了「 釘釘獲取免登錄受權碼CODE,返回:不存在的臨時受權碼40078」的坑,到網上搜索了一圈,發現這個關於這個問題描述的資料很是少,也沒有看到對應的解決方案,通過摸索以後,總結一下經驗,但願能幫到你們。
身份驗證「免登」是指用戶進入應用後,無需輸入釘釘用戶名和密碼,應用程序可自動獲取當前用戶身份,進而登陸系統的流程。 https://ding-doc.dingtalk.com/doc#/serverapi2/vt6khw
當您是爲本身的企業/表明一個企業開發全新的「企業應用」,或者把您的企業內部的遺留系統鏈接到釘釘後造成「企業微應用」後,企業員工在釘釘內使用該企業微應用時,只要直接點擊應用,即可免輸入帳戶密碼實現自動登陸您所開發的系統。html
當您開發完企業或者ISV微應用後,須要企業管理員在oa.dingtalk.com對微應用進行一些設置和管理功能時,您須要開發一套應用的後臺管理系統,管理員在oa.dingtalk.com中只要直接點微應用管理後臺,即可免輸入帳戶密碼實現自動登陸您的應用管理後臺系統。c#
當您開發了一個獨立的網站,可是但願用戶以釘釘的帳號登陸您的網站時,能夠經過釘釘掃碼方式實現免密登陸此網站。注意此網站並非釘釘客戶端內使用的企業/ISV應用。api
當您開發的H5網站在釘釘客戶端內打開,只須要用戶直接點擊H5連接,即可以避免輸入釘釘帳戶密碼實現自動登陸的流程。注意此網站並非釘釘客戶端內使用的企業應用/第三方企業應用。網站
當您開發了一個獨立的網站,但願以釘釘的帳號登陸您的網站時,能夠經過展示釘釘提供的登陸URL的頁面,用戶輸入釘釘帳戶密碼後實現登陸您的網站的流程。注意此網站並非釘釘客戶端內使用的企業應用/第三方應用。ui
當您經過臨時受權碼(tmp_auth_code)和套件token(suite_access_token)去換取永久受權碼(permanent_code)之時,須要保證suite_access_token,tmp_auth_code都沒有過時。 https://g.alicdn.com/dingding/opendoc/docs/_faq/tab0.html?t=1467363847934#q-%E4%B8%8D%E5%AD%98%E5%9C%A8%E7%9A%84%E4%B8%B4%E6%97%B6%E6%8E%88%E6%9D%83%E7%A0%81
其實若是你們認真對方以上兩點文檔以後已經發現問題出如今哪裏了,其實從兩個方面查找緣由便可:一是access_token是否過時,而是code是否正確。
我使用的是企業內部應用免登的接口,其實就是三個步驟,1:獲取臨時的code;2:獲取access_token;3:利用code和access_token獲取用戶免登錄信息。https://ding-doc.dingtalk.com/doc#/serverapi2/clotubcode
檢查了access_token,發現access_token是能夠正常獲取的,因此那麼問題頗有多是在獲取code上面,再次研究文檔才發現本身犯了一個很是低級的錯誤,就是利用了釘釘內免登錄第三方網站的接口獲取code,而後用企業內部應用免登的接口進行獲取用戶的登錄信息,因此解決的方法就是利用企業內部應用免登的接口獲取code,而後用企業內部應用免登的接口進行獲取用戶的登錄信息。cdn
至此個人問題已經解決了,其實就是一個很低級的錯誤,認真閱讀官方文檔的話徹底能夠避免這個狀況的發生。