OAuth ist ein offenes Protokoll, das es Benutzern erm?glicht, Drittanwendungen den Zugriff auf die privaten Ressourcen des Benutzers (z. B. pers?nliche Benutzerinformationen, Fotos, Videos, Kontaktlisten) zu erm?glichen, die auf einer Website auf sichere und standardm??ige Weise gespeichert sind, ohne dass ein Benutzername angegeben werden muss und Passwort für Anwendungen von Drittanbietern. In diesem Artikel werden das OAuth-Protokoll und seine spezifische Implementierung in WeChat ausführlich vorgestellt.
Einführung in das OAuth2.0-Protokoll
OAuth2.0 ist die n?chste Version des OAuth-Protokolls, ist jedoch nicht abw?rtskompatibel mit OAuth 1.0. OAuth 2.0 konzentriert sich auf die Einfachheit für Client-Entwickler und bietet gleichzeitig spezielle Authentifizierungsflüsse für Webanwendungen, Desktop-Anwendungen sowie Mobil- und Wohnzimmerger?te. Mit OAuth 2.0 k?nnen Benutzer anstelle eines Benutzernamens und eines Kennworts ein Token bereitstellen, um auf ihre bei einem bestimmten Dienstanbieter gespeicherten Daten zuzugreifen. Jeder Token autorisiert eine bestimmte Website (z. B. eine Website zur Videobearbeitung), innerhalb eines bestimmten Zeitraums (z. B. innerhalb der n?chsten 2 Stunden) auf eine bestimmte Ressource (z. B. nur die Videos in einem bestimmten Album) zuzugreifen. Auf diese Weise erm?glicht OAuth Benutzern, Websites Dritter den Zugriff auf ihre bei einem anderen Dienstanbieter gespeicherten Informationen zu gestatten, ohne ihre Zugriffsberechtigungen oder den gesamten Inhalt ihrer Daten weiterzugeben.
Der spezifische Prozess der OAuth2.0-Authentifizierung und -Autorisierung:
Zu den drei am OAuth2.0-Authentifizierungs- und Autorisierungsprozess beteiligten Parteien geh?ren:
1. Dienstanbieter, über den Benutzer geschützte Ressourcen wie Fotos, Videos und Kontaktlisten speichern.
2. Benutzer, der Eigentümer geschützter Ressourcen, die beim Dienstanbieter gespeichert sind.
3. Client, eine Drittanbieteranwendung, die auf die Ressourcen des Dienstanbieters zugreifen m?chte, normalerweise eine Website, beispielsweise eine Website, die Fotodruckdienste anbietet. Vor dem Authentifizierungsprozess muss der Kunde beim Dienstanbieter eine Kundenidentit?t beantragen.
Der Prozess der Verwendung von OAuth zur Authentifizierung und Autorisierung ist wie folgt:
1. Der Benutzer greift auf die Website des Kunden zu und m?chte die im Dienst gespeicherten Ressourcen des Benutzers bedienen Provider;
2. Der Client fordert einen tempor?ren Token vom Service Provider an;
3. Nachdem der Service Provider die Identit?t des Clients überprüft hat, gew?hrt er einen tempor?ren Token;
4. Nachdem der Client das tempor?re Token erhalten hat, leitet er den Benutzer zur Autorisierungsseite des Dienstanbieters weiter, um eine Benutzerautorisierung anzufordern. Bei diesem Vorgang werden das tempor?re Token und die Rückrufverbindung des Clients an den Dienstanbieter gesendet.
5 Der Benutzer gibt den Benutzernamen und das Passwort auf der Webseite des Dienstanbieters ein und autorisiert den Client dann für den Zugriff Ressource. ;
6. Nach erfolgreicher Autorisierung leitet der Dienstanbieter den Benutzer zur Webseite des Kunden zurück;
7 auf dem tempor?ren Token;
8. Der Dienstanbieter gew?hrt dem Client einen Zugriffstoken basierend auf dem tempor?ren Token und der Autorisierung des Benutzers.
9 Dateien, die auf den Ressourcen des Dienstanbieters gespeichert sind.
WeChat-Webseite OAuth2.0-Autorisierung:
Wenn der Benutzer auf die Drittanbieter-Webseite des offiziellen Kontos in WeChat zugreift (au?er Web WeChat), kann der offizielle Kontoentwickler die erhalten aktuelle grundlegende Benutzerinformationen (einschlie?lich Spitzname, Geschlecht, Stadt, Land). Mithilfe von Benutzerinformationen k?nnen Sie Funktionen wie Erlebnisoptimierung, Benutzerquellenstatistiken, Kontobindung und Benutzeridentit?tsauthentifizierung realisieren.
Es ist zu beachten, dass die Schnittstelle zum Abrufen grundlegender Benutzerinformationen (die in einem sp?teren Blog-Beitrag vorgestellt wird) die grundlegenden Informationen des Benutzers nur dann basierend auf der OpenID des Benutzers abrufen kann, wenn der Benutzer mit dem Beamten interagiert Für die grundlegenden Informationen des Benutzers ist keine Nachrichteninteraktion erforderlich. Solange der Benutzer die Webseite des offiziellen Kontos aufruft, wird eine Benutzeroberfl?che angezeigt, die die Autorisierung durchführt , k?nnen seine oder ihre grundlegenden Informationen abgerufen werden (für diesen Vorgang ist nicht einmal erforderlich, dass der Benutzer dem offiziellen Konto gefolgt ist.)
Im Folgenden zeigen wir anhand eines konkreten Beispiels den detaillierten Entwicklungsprozess.
Konfigurieren Sie den Autorisierungs-Callback-Dom?nennamen:
Bevor das offizielle WeChat-Konto eine Benutzer-Webseitenautorisierung anfordert, müssen Entwickler dies tun Konfigurieren Sie zun?chst den Autorisierungsrückrufnamen auf der Seite ?Mein Dienst“ der ?ffentlichen Plattform-Website. Beachten Sie, dass der Dom?nenname hier weder http:// noch https:// enth?lt. Darüber hinaus ist die Konfigurationsspezifikation für den Autorisierungsrückruf-Dom?nennamen der vollst?ndige Dom?nenname. Der Dom?nenname, für den eine Webseitenautorisierung erforderlich ist, lautet beispielsweise: www.qq.com Nach der Konfiguration werden alle Seiten unter diesem Dom?nennamen angezeigt, z. B. http:/. /www.qq.com/music.html, http://www.qq.com/login.html kann eine OAuth2.0-Authentifizierung durchführen. Allerdings k?nnen http://pay.qq.com und http://music.qq.com keine OAuth2.0-Authentifizierung durchführen.
Betreten Sie dazu die Serviceseite (verwenden Sie das offizielle Servicekonto oder zertifizierte Abonnementkonto und finden Sie es über meinen Service. Wenn es sich um ein Testkonto handelt, finden Sie es direkt auf der Homepage) und finden Sie das OAuth2.0-Webseitenautorisierung. Klicken Sie rechts auf den Bearbeitungslink:
Geben Sie den Dom?nennamen in das Popup-Fenster ein und klicken Sie zum Speichern auf die Schaltfl?che OK:
Benutzer stimmt der Autorisierung und dem Erhalt des Codes zu:
Dieser Schritt entspricht dem zweiten Schritt des zuvor eingeführten OAuth2.0-Authentifizierungsprozesses ?Der Client fordert einen tempor?ren Token vom Dienstanbieter an.“ Zu diesem Zweck k?nnen Sie WeChats OAuth2 anfordern .0-Schnittstelle, um den Code zu erhalten. Dazu müssen wir eine Apex-Seite erstellen und den Domainnamen finden Der Dom?nenname, auf den normalerweise von China aus zugegriffen wird, ist https://ap1.salesforce.com. Geben Sie https://ap1.salesforce.com/apex/oauth2test in die Adressleiste des Browsers ein. Force.com meldet, dass die Seite nicht existiert. Klicken Sie auf Klicken Sie auf den Link ?Seite erstellen oauth2test“:
Die erstellte Seite sieht wie folgt aus: Wenn der Entwicklermodus aktiviert ist, ist die Seite in einen oberen und einen unteren Teil unterteilt . Der obere Teil ist der Anzeigeeffekt und der untere Teil ist das Quellcode-Bearbeitungsfenster. Standardm??ig wendet Force.com seine eigenen oberen Navigations-, linken Navigations- und CSS-Stile auf die neu erstellte Seite an:
Wir weisen Force an, indem wir der ersten Zeile den folgenden Code hinzufügen. .com verwendet nicht den Standard-CSS-Stil, zeigt die obere und linke Navigationsleiste nicht an und das letzte Controller-Attribut gibt die entsprechende Controller-Klasse an Um zur Apex-Seite zu wechseln, ?hnlich der aspx.cs-Klasse, die der aspx-Seite entspricht, und die Maus im Bearbeitungsleistenfenster bleibt, halten Sie die Tastenkombination Strg + S gedrückt, um den bearbeiteten Code zu speichern:
Zu diesem Zeitpunkt existiert die entsprechende oauth2testcontroller-Klasse nicht und Der Browser meldet den folgenden Fehler:
Hier klicken Die beiden Links ?Apex-Klasse ??ffentliche Klasse oauth2testcontroller‘ erstellen“ erstellen automatisch die Controller-Klasse. Beachten Sie, dass der einzige Unterschied zwischen diesen beiden Links das Schlüsselwort ?with Sharing“ ist. Dieses Schlüsselwort gibt an, dass die aktuelle Klasse die gleichen Zugriffsrechte auf verschiedene Objekte (entspricht Datentabellen), Felder usw. hat wie der aktuell angemeldete Benutzer. Wenn nicht angegeben, hat die Apex-Seite Zugriff auf alle Objekte und Felder. Nach der Erstellung wird es in der Codebearbeitungsleiste unten eine zus?tzliche Registerkarte für die Controller-Klasse geben:
Fügen Sie den folgenden Code in dieser Klasse hinzu:
public class oauth2testcontroller { public String code {get; set;} public oauth2testcontroller(){ code = ApexPages.currentPage().getParameters().get('code'); if(String.isBlank(code)){ code = 'No Code'; } } }
Die 2. Zeile dieses Codes definiert einen ?ffentlichen Attributcode. Die 4. Zeile ruft den Codeparameter in der URL über das ApexPages-Objekt ab und bestimmt dann, ob der Codewert leer ist , dann Kein Code eingeben. Unten sehen wir, dass der Code-Parameter zur URL hinzugefügt wird, wenn die WeChat-Autorisierung diese URL erfolgreich zurückruft.
Als n?chstes ?ndern Sie die Startseite leicht, um den erhaltenen Codewert auf der Seite anzuzeigen:
<apex:page standardstylesheets="false" showHeader="false" sidebar="false" controller="oauth2testcontroller"> {!code} </apex:page>
{!Objektname} ist die Syntax, die zum Anzeigen von Objektwerten in Force verwendet wird .com Visualforce-Seite, als n?chstes müssen wir die Seite so konfigurieren, dass sie über das ?ffentliche Netzwerk zug?nglich ist, geben Sie Setup –> ein und klicken Sie auf die entsprechende Site-Beschriftung die Site wie unten gezeigt:
Nachdem Sie die detaillierte Konfigurationsseite aufgerufen haben, suchen Sie die ?Site Visualforce-Seite“ und klicken Sie rechts auf die Schaltfl?che Bearbeiten:
Suchen Sie oauth2test in der Liste links. Fügen Sie die Seite rechts hinzu und speichern Sie die ?nderungen:
Zu diesem Zeitpunkt k?nnen Sie bestehen die ?ffentliche Netzwerkadresse http://johnson0001-developer-edition.ap1.force.com/oauth2test Besuchen wir die Seite, die wir zuvor erstellt haben. Als n?chstes k?nnen wir die OAuth2-Authentifizierungsschnittstelle der WeChat-Plattform verwenden, um die URL zu erstellen und Benutzer zum Zugriff darauf über WeChat zu führen. Das Format der Schnittstelle ist wie folgt:
https://open.weixin.qq .com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect
若提示“該鏈接無法訪問”,請檢查參數(shù)是否填寫錯誤,是否擁有scope參數(shù)對應(yīng)的授權(quán)作用域權(quán)限,其中每個參數(shù)的詳細(xì)說明如下:
在我們的例子里URL如下,其中scope我們指定為snsapi_userinfo,彈出授權(quán)頁面:
https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx3b3aef2c09447269&redirect_uri=http://johnson0001-developer-edition.ap1.force.com/oauth2test&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect
興許是測試賬號的關(guān)系,雖然微信接口文檔里提到在制定scope為snsapi_userinfo的情況下會彈出如下圖左所示的授權(quán)頁面,但反復(fù)嘗試(乃至刪除并重新關(guān)注賬號)中也沒有看到該頁面,不過重點是我們得到了臨時令牌,如下圖右所示。右圖實際是http://johnson0001-developer-edition.ap1.force.com/oauth2test頁面,用戶同意授權(quán)后跳轉(zhuǎn)到(或者我遇到的實際情況是直接跳轉(zhuǎn))到redirect_uri/?CODE&state=STATE。若用戶禁止授權(quán),則重定向后不會帶上code參數(shù),僅會帶上state參數(shù)redirect_uri?state=STATE。
另外特別需要說明的是,code作為換取access_token的臨時票據(jù),每次用戶授權(quán)帶上的code都不一樣,code只能使用一次,5分鐘未被使用自動過期。
通過Code換取網(wǎng)頁授權(quán)access_token:
首先請注意,這里通過code換取的網(wǎng)頁授權(quán)access_token,與基礎(chǔ)支持中的access_token不同。公眾號可通過下述接口來獲取網(wǎng)頁授權(quán)access_token。如果網(wǎng)頁授權(quán)的作用域為snsapi_base,則本步驟中獲取到網(wǎng)頁授權(quán)access_token的同時,也獲取到了 openid,snsapi_base式的網(wǎng)頁授權(quán)流程即到此為止。 獲取code后,可以通過以下接口獲取access_token:
https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code
這里的CODE即為通過前面方式獲得的臨時令牌(票據(jù)),參數(shù)的具體說明如下:
將URL直接輸入到瀏覽器地址欄即可得到返回數(shù)據(jù),當(dāng)然真實場景里更多通過后臺代碼來請求,正確返回時的JSON數(shù)據(jù)包如下:
{ "access_token":"ACCESS_TOKEN", "expires_in":7200, "refresh_token":"REFRESH_TOKEN", "openid":"OPENID", "scope":"SCOPE" }
參數(shù)的具體說明如下:
錯誤時微信會返回JSON數(shù)據(jù)包如下(示例為Code無效錯誤):
{"errcode":40029,"errmsg":"invalid code"}
在本例中獲得的access_token實例如下:
{"access_token":"OezXcEiiBSKSxW0eoylIeMEUA_AZuBDY8AO0IIw270MMsvemqLvgx1HqemeXIZfzXW2d6yHCPy9cA1yHZ1jHCkwlH5Ct5Jfa1jOQm88M9LzU_O8BCKMNhN7yLlHJfOFLuf4lLTNGOOsoWYxQzYVNGw","expires_in":7200,"refresh_token":"OezXcEiiBSKSxW0eoylIeMEUA_AZuBDY8AO0IIw270MMsvemqLvgx1HqemeXIZfz_Vj5pJZlv2V5wK9EzWmxQmM07cqIAwMXOdqzlQs-NY4hiyENP4WhO4Twpko-3iY_pAPZRnGGmAVt3DirZaWIyg","openid":"ou-37t936RNZEcW0mI75RN2pdxkc","scope":"snsapi_userinfo"}
可以看到上面access_token的默認(rèn)失效時間是7200秒,也就是2小時,當(dāng)access_token超時后,可以通過refresh_token進(jìn)行刷新,refresh_token擁有較長的有效期(7天、30天、60天、90天),當(dāng)refresh_token失效后,需要用戶重新授權(quán),簡化理解起見,我們在本文的最后再介紹相關(guān)技術(shù)。
拉取用戶信息(需Scope為snasapi_userinfo):
通過access_token獲取用戶信息的接口如下,使用GET方法:
https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN
參數(shù)具體說明如下:
本例的URL如下:
https://api.weixin.qq.com/sns/userinfo?access_token=OezXcEiiBSKSxW0eoylIeMEUA_AZuBDY8AO0IIw270MMsvemqLvgx1HqemeXIZfzXW2d6yHCPy9cA1yHZ1jHCkwlH5Ct5Jfa1jOQm88M9LzU_O8BCKMNhN7yLlHJfOFLuf4lLTNGOOsoWYxQzYVNGw&openid=ou-37t936RNZEcW0mI75RN2pdxkc&lang=zh_CN
輸入瀏覽器訪問即可得到相應(yīng)的用戶信息:
{"openid":"ou-37t936RNZEcW0mI75RN2pdxkc","nickname":"王浩","sex":1,"language":"zh_CN","city":"松江","province":"上海","country":"中國","headimgurl":"http:\/\/wx.qlogo.cn\/mmopen\/lqsZNvDqcXe8nBKHBPsp9YHuZXPtkzOD1uq3r3xxDicuDLKGlicNd1b371ODnn9xNBB9y9ChBSfL7tuX6m9FS8koY9Ex1iaJRDI\/0","privilege":[]}
刷新access_token:
可以通過前面在“通過Code換取網(wǎng)頁授權(quán)access_token”小節(jié)中獲得的refresh_token來調(diào)用刷新Token接口獲取更新的access_token,微信在API文檔里介紹refresh_token擁有較長的有效期(7天、30天、60天、90天),但實際微信的refresh_token的有效期是多長沒有具體說明,如果有具體經(jīng)驗的朋友歡迎分享。微信刷新access_token的接口如下:
https://api.weixin.qq.com/sns/oauth2/refresh_token?appid=APPID&grant_type=refresh_token&refresh_token=REFRESH_TOKEN
接口的具體參數(shù)定義如下:
正確時返回的JSON數(shù)據(jù)包如下:
{ "access_token":"ACCESS_TOKEN", "expires_in":7200, "refresh_token":"REFRESH_TOKEN", "openid":"OPENID", "scope":"SCOPE" }
數(shù)據(jù)包的具體定義如下:
錯誤時微信會返回JSON數(shù)據(jù)包如下(示例為Code無效錯誤):
{"errcode":40029,"errmsg":"invalid code"}
更多Force.com WeChat-Entwicklungsserie OAuth2.0-Webautorisierung相關(guān)文章請關(guān)注PHP中文網(wǎng)!

Hei?e KI -Werkzeuge

Undress AI Tool
Ausziehbilder kostenlos

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Clothoff.io
KI-Kleiderentferner

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem v?llig kostenlosen KI-Gesichtstausch-Tool aus!

Hei?er Artikel

Hei?e Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)