Heim >WeChat-Applet >WeChat-Entwicklung >Force.com WeChat-Entwicklungsserie OAuth2.0-Webautorisierung
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
若提示“该链接无法访问”,请检查参数是否填写错误,是否拥有scope参数对应的授权作用域权限,其中每个参数的详细说明如下:
在我们的例子里URL如下,其中scope我们指定为snsapi_userinfo,弹出授权页面:
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
兴许是测试账号的关系,虽然微信接口文档里提到在制定scope为snsapi_userinfo的情况下会弹出如下图左所示的授权页面,但反复尝试(乃至删除并重新关注账号)中也没有看到该页面,不过重点是我们得到了临时令牌,如下图右所示。右图实际是http://johnson0001-developer-edition.ap1.force.com/oauth2test页面,用户同意授权后跳转到(或者我遇到的实际情况是直接跳转)到redirect_uri/?CODE&state=STATE。若用户禁止授权,则重定向后不会带上code参数,仅会带上state参数redirect_uri?state=STATE。
另外特别需要说明的是,code作为换取access_token的临时票据,每次用户授权带上的code都不一样,code只能使用一次,5分钟未被使用自动过期。
通过Code换取网页授权access_token:
首先请注意,这里通过code换取的网页授权access_token,与基础支持中的access_token不同。公众号可通过下述接口来获取网页授权access_token。如果网页授权的作用域为snsapi_base,则本步骤中获取到网页授权access_token的同时,也获取到了 openid,snsapi_base式的网页授权流程即到此为止。 获取code后,可以通过以下接口获取access_token:
https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code
这里的CODE即为通过前面方式获得的临时令牌(票据),参数的具体说明如下:
将URL直接输入到浏览器地址栏即可得到返回数据,当然真实场景里更多通过后台代码来请求,正确返回时的JSON数据包如下:
{ "access_token":"ACCESS_TOKEN", "expires_in":7200, "refresh_token":"REFRESH_TOKEN", "openid":"OPENID", "scope":"SCOPE" }
参数的具体说明如下:
错误时微信会返回JSON数据包如下(示例为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的默认失效时间是7200秒,也就是2小时,当access_token超时后,可以通过refresh_token进行刷新,refresh_token拥有较长的有效期(7天、30天、60天、90天),当refresh_token失效后,需要用户重新授权,简化理解起见,我们在本文的最后再介绍相关技术。
拉取用户信息(需Scope为snasapi_userinfo):
通过access_token获取用户信息的接口如下,使用GET方法:
https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN
参数具体说明如下:
本例的URL如下:
https://api.weixin.qq.com/sns/userinfo?access_token=OezXcEiiBSKSxW0eoylIeMEUA_AZuBDY8AO0IIw270MMsvemqLvgx1HqemeXIZfzXW2d6yHCPy9cA1yHZ1jHCkwlH5Ct5Jfa1jOQm88M9LzU_O8BCKMNhN7yLlHJfOFLuf4lLTNGOOsoWYxQzYVNGw&openid=ou-37t936RNZEcW0mI75RN2pdxkc&lang=zh_CN
输入浏览器访问即可得到相应的用户信息:
{"openid":"ou-37t936RNZEcW0mI75RN2pdxkc","nickname":"王浩","sex":1,"language":"zh_CN","city":"松江","province":"上海","country":"中国","headimgurl":"http:\/\/wx.qlogo.cn\/mmopen\/lqsZNvDqcXe8nBKHBPsp9YHuZXPtkzOD1uq3r3xxDicuDLKGlicNd1b371ODnn9xNBB9y9ChBSfL7tuX6m9FS8koY9Ex1iaJRDI\/0","privilege":[]}
刷新access_token:
可以通过前面在“通过Code换取网页授权access_token”小节中获得的refresh_token来调用刷新Token接口获取更新的access_token,微信在API文档里介绍refresh_token拥有较长的有效期(7天、30天、60天、90天),但实际微信的refresh_token的有效期是多长没有具体说明,如果有具体经验的朋友欢迎分享。微信刷新access_token的接口如下:
https://api.weixin.qq.com/sns/oauth2/refresh_token?appid=APPID&grant_type=refresh_token&refresh_token=REFRESH_TOKEN
接口的具体参数定义如下:
正确时返回的JSON数据包如下:
{ "access_token":"ACCESS_TOKEN", "expires_in":7200, "refresh_token":"REFRESH_TOKEN", "openid":"OPENID", "scope":"SCOPE" }
数据包的具体定义如下:
错误时微信会返回JSON数据包如下(示例为Code无效错误):
{"errcode":40029,"errmsg":"invalid code"}
更多Force.com WeChat-Entwicklungsserie OAuth2.0-Webautorisierung相关文章请关注PHP中文网!