


Entwicklung der ?ffentlichen WeChat-Plattform: OAuth2.0-Anweisungen
Feb 27, 2017 pm 01:28 PMOAuth2.0 verstehen
Lassen Sie uns zun?chst den Betriebsmodus von OAuth2.0 anhand eines Bildes verstehen:
Wir k?nnen es dem Bild oben entnehmen Der gesamte Prozess durchlief zwei ?Handshakes“ und schlie?lich wurde das autorisierte AccessToken verwendet, um eine Reihe von Anfragen zu stellen. Der relevante Prozess wird wie folgt erkl?rt:
A: Der Client sendet eine Verifizierungsanfrage an den Server. und die Anfrage enth?lt normalerweise das Tragen dieser Parameter
ID-Identifikation, wie z. B. appId
URL, zu der nach der überprüfung gesprungen werden soll (redirectUrl)
Statusparameter (optional)
Autorisierungsfunktion Dom?nenbereich (optional)
Antworttyp (optional)
B: Der Server gibt eine Gew?hrungsautorisierungsidentifikation zurück (WeChat nennt es standardm??ig Code), ?hnlich einer einmaligen tempor?rer String-Schlüssel. Wenn ?redirectUrl“ in A bereitgestellt wird, führt der Server einen Sprung durch und greift mit den Parametern ?grant“ und ?status“ auf ?redirectUrl“ zu.
C: Die RedirectUrl-entsprechende Seite des Clients verwendet Grant, um erneut eine Anfrage zu initiieren. Diese Anfrage enth?lt normalerweise einige vertrauliche Informationen:
ID-Identifikation
Passwort
Grant-String (Code)
Grant-Typ (optional, der Standardwert ist Code in WeChat)
D: Nachdem der Server überprüft hat, dass die ID, das Passwort und die Bewilligung korrekt sind, kehrt er zurück AccessToken (Hinweis: Das AccessToken hier hat nichts mit dem in der vorherigen allgemeinen Schnittstelle und der erweiterten Schnittstelle eingeführten AccessToken zu tun und kann nicht kreuzweise verwendet werden)
E: Der Client verwendet AccessToken, um eine Reihe von APIs anzufordern und tr?gt dabei keine AppId, Secret und Grant mehr.
F: Der Server gibt das Anforderungsergebnis zurück.
Verwendung von OAuth2.0 in WeChat
Nachdem wir die Grundprinzipien von OAuth2.0 verstanden haben, werfen wir einen Blick darauf, wie OAuth2.0 in WeChat verwendet wird.
Nehmen Sie ein Szenario an: Der Benutzer gibt ein ?ffentliches WeChat-Konto ein und ?ffnet dann über den Link in der Nachricht eine Spielwebseite im eingebetteten WeChat-Browser. Für dieses Spiel muss sich der Benutzer anmelden und den Spielstand des Benutzers aufzeichnen .
Wir haben zwei M?glichkeiten, mit dieser Situation umzugehen:
Erm?glichen Sie Benutzern, sich auf der Webseite zu registrieren und anzumelden (und sie müssen sich m?glicherweise jedes Mal erneut anmelden, wenn sie diese Webseite ?ffnen, da WeChat dies getan hat Integriertes Browsen Die Cookie-Speicherzeit des Servers ist sehr kurz. Dies ist natürlich ein sehr betrügerisches Design.
Verwenden Sie OAuth2.0. Wenn der Benutzer diese Seite betritt, wird zun?chst festgestellt, ob der Benutzer angemeldet ist. Wenn nicht, wird automatisch zur OAuth2.0-Autorisierungsseite gesprungen. Diese Seite führt automatisch die oben genannte ABCD-Verifizierungsreihe durch und ruft dann die OpenId des Benutzers ab über EF und noch detailliertere Informationen (einschlie?lich Avatar) wird der Anmeldevorgang (oder die erforderliche Registrierung) automatisch abgeschlossen, und der Benutzer betritt das Spiel dann direkt im angemeldeten Zustand.
Es ist ersichtlich, dass die Verwendung von OAuth2.0 die Benutzererfahrung erheblich verbessert und die WeChat OpenId des Benutzers automatisch binden und identifizieren kann.
Es ist zu beachten, dass die oben erw?hnte ?OAuth2.0-Autorisierungsseite“ auch zwei Formen hat:
Wenn der Bereich in Anfrage A snsapi_base ist, wird der gesamte Autorisierungsprozess dort automatisch abgeschlossen Es wird keine Zwischenseite auf dem Client des Benutzers angezeigt, aber das Autorisierungsergebnis kann nur die OpenId des Benutzers abrufen (unabh?ngig davon, ob der Benutzer dem Benutzer gefolgt ist. Wenn der Benutzer dem Benutzer folgt, verwenden Sie natürlich erneut die Benutzerinformationsschnittstelle in der erweiterten Schnittstelle, um die OpenId des Benutzers zu erhalten. Die Informationen sind ebenfalls verfügbar, es gibt jedoch einige Umwege)
Wenn der Bereich in Anforderung A snsapi_userinfo ist, muss eine Autorisierungsseite bereitgestellt werden (?hnlich der Autorisierung, die). Viele Websites verwenden Weibo-Konten und QQ-Konten, um sich anzumelden.) ) Erst wenn der Benutzer zustimmt, werden die detaillierten Informationen des Benutzers sofort abgerufen. Der Benutzer kann hier ein folgender Benutzer oder ein nicht verfolgter Benutzer sein, und der zurückgegebene Inhalt ist derselbe.
Mit anderen Worten, die Methode von snsapi_base kann die OpenId des Benutzers ?ohne dass es jemand merkt“ abrufen und den Anmelde- und Registrierungsprozess vollautomatisch abschlie?en, aber die Menge an Informationen ist begrenzt; Die angegebene Schnittstelle wird dann automatisch abgeschlossen. W?hrend des gesamten Vorgangs ist diese Autorisierung zeitlich begrenzt und muss nach Ablauf der Zeit erneut abgefragt werden.
Senparc.Weixin.MP OAuth2.0-Schnittstelle
Quelldateiordner: Senparc.Weixin.MP/AdvancedAPIs/OAuth
Die relevanten Methoden im Quellcode sind wie folgt :
namespace Senparc.Weixin.MP.AdvancedAPIs { //官方文檔:http://mp.weixin.qq.com/wiki/index.php?title=%E7%BD%91%E9%A1%B5%E6%8E%88%E6%9D%83%E8%8E%B7%E5%8F%96%E7%94%A8%E6%88%B7%E5%9F%BA%E6%9C%AC%E4%BF%A1%E6%81%AF#.E7.AC.AC.E4.B8.80.E6.AD.A5.EF.BC.9A.E7.94.A8.E6.88.B7.E5.90.8C.E6.84.8F.E6.8E.88.E6.9D.83.EF.BC.8C.E8.8E.B7.E5.8F.96code /// <summary> /// 應(yīng)用授權(quán)作用域 /// </summary> public enum OAuthScope { /// <summary> /// 不彈出授權(quán)頁(yè)面,直接跳轉(zhuǎn),只能獲取用戶openid /// </summary> snsapi_base, /// <summary> /// 彈出授權(quán)頁(yè)面,可通過(guò)openid拿到昵稱、性別、所在地。并且,即使在未關(guān)注的情況下,只要用戶授權(quán),也能獲取其信息 /// </summary> snsapi_userinfo } public static class OAuth { /// <summary> /// 獲取驗(yàn)證地址 /// </summary> /// <param name="appId"></param> /// <param name="redirectUrl"></param> /// <param name="state"></param> /// <param name="scope"></param> /// <param name="responseType"></param> /// <returns></returns> public static string GetAuthorizeUrl(string appId, string redirectUrl, string state, OAuthScope scope, string responseType = "code") { var url = string.Format("https://open.weixin.qq.com/connect/oauth2/authorize?appid={0}&redirect_uri={1}&response_type={2}&scope={3}&state={4}#wechat_redirect", appId, redirectUrl.UrlEncode(), responseType, scope, state); /* 這一步發(fā)送之后,客戶會(huì)得到授權(quán)頁(yè)面,無(wú)論同意或拒絕,都會(huì)返回redirectUrl頁(yè)面。 * 如果用戶同意授權(quán),頁(yè)面將跳轉(zhuǎn)至 redirect_uri/?code=CODE&state=STATE。這里的code用于換取access_token(和通用接口的access_token不通用) * 若用戶禁止授權(quán),則重定向后不會(huì)帶上code參數(shù),僅會(huì)帶上state參數(shù)redirect_uri?state=STATE */ return url; } /// <summary> /// 獲取AccessToken /// </summary> /// <param name="appId"></param> /// <param name="secret"></param> /// <param name="code">code作為換取access_token的票據(jù),每次用戶授權(quán)帶上的code將不一樣,code只能使用一次,5分鐘未被使用自動(dòng)過(guò)期。</param> /// <param name="grantType"></param> /// <returns></returns> public static OAuthAccessTokenResult GetAccessToken(string appId, string secret, string code, string grantType = "authorization_code") { var url = string.Format("https://api.weixin.qq.com/sns/oauth2/access_token?appid={0}&secret={1}&code={2}&grant_type={3}", appId, secret, code, grantType); return CommonJsonSend.Send<OAuthAccessTokenResult>(null, url, null, CommonJsonSendType.GET); } /// <summary> /// 刷新access_token(如果需要) /// </summary> /// <param name="appId"></param> /// <param name="refreshToken">填寫通過(guò)access_token獲取到的refresh_token參數(shù)</param> /// <param name="grantType"></param> /// <returns></returns> public static OAuthAccessTokenResult RefreshToken(string appId, string refreshToken, string grantType = "refresh_token") { var url = string.Format("https://api.weixin.qq.com/sns/oauth2/refresh_token?appid={0}&grant_type={1}&refresh_token={2}", appId, grantType, refreshToken); return CommonJsonSend.Send<OAuthAccessTokenResult>(null, url, null, CommonJsonSendType.GET); } public static OAuthUserInfo GetUserInfo(string accessToken,string openId) { var url = string.Format("https://api.weixin.qq.com/sns/userinfo?access_token={0}&openid={1}",accessToken,openId); return CommonJsonSend.Send<OAuthUserInfo>(null, url, null, CommonJsonSendType.GET); } } }
Spezifische Beispielmethoden finden Sie unter Senparc.Weixin.MP.Sample/Controllers/OAuth2Controller.cs sowie im Code für die entsprechende Ansicht.
Hinweis
Sie müssen über ein authentifiziertes Dienstkonto verfügen, um die OAuth-Schnittstelle verwenden zu k?nnen.
Das in der Schnittstelle verwendete AccessToken und das in der erweiterten Schnittstelle (einschlie?lich der gemeinsamen Schnittstelle) verwendete AccessToken stehen in keiner Beziehung zueinander, selbst wenn sie über dieselbe AppId und dasselbe Geheimnis abgerufen werden.
Die aktuelle offizielle Autorisierungsseite ist nicht 100 % stabil. Manchmal sind mehrere Klicks erforderlich, um eine solche Situation zu überwinden. Zumindest oberfl?chlich ist dies nicht m?glich siehe Fehlerseite.
Aus Sicherheitsgründen müssen Sie vor der Verwendung von OAuth2.0 im WeChat-Backend [Meine Dienste] eingeben, um den Dom?nennamen der Rückrufseite festzulegen:
Weitere Anweisungen zur Entwicklung der ?ffentlichen WeChat-Plattform: OAuth2.0 finden Sie auf der chinesischen PHP-Website für verwandte Artikel!

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)