


Développement de la plateforme publique WeChat?: description OAuth2.0
Feb 27, 2017 pm 01:28 PMComprendre OAuth2.0
Tout d'abord, comprenons le mode de fonctionnement d'OAuth2.0 à travers une image?:
Nous pouvons le voir sur l'image ci-dessus L'ensemble du processus est passé par deux "poignées de main", et finalement le AccessToken autorisé a été utilisé pour faire une série de requêtes. Le processus concerné est expliqué comme suit?:
A?: Le client envoie une demande de vérification au serveur, et la requête contient généralement ces paramètres
Identification d'ID, telle que appId
URL vers laquelle accéder après vérification (redirectUrl)
Paramètre d'état (facultatif)
Fonction d'autorisation Portée du domaine (facultatif)
Type de réponse (facultatif)
B?: Le serveur renvoie une identification d'autorisation d'octroi (WeChat l'appelle code par défaut), similaire à une identification unique Clé de cha?ne temporaire. Si redirectUrl est fourni dans A, le serveur fera un saut et accédera à redirectUrl avec les paramètres d'octroi et d'état.
C?: La page correspondante redirectUrl du client utilise Grant pour lancer à nouveau une demande. Cette demande contient généralement des informations sensibles?:
Identification
Mot de passe
<.> cha?ne d'octroi (code) type d'octroi (facultatif, la valeur par défaut est le code dans WeChat) D?: une fois que le serveur a vérifié que l'ID, le mot de passe et l'octroi sont corrects, il renvoie AccessToken (remarque, l'AccessToken ici n'a rien à voir avec l'AccessToken introduit dans l'interface générale et l'interface avancée précédente, et ne peut pas être utilisé de manière croisée) E?: Le client utilise AccessToken pour demander une série d'API , et ne contiendra plus l'appId, le Secret et l'octroi dans le processus ni d'autres informations sensibles. F?: Le serveur renvoie le résultat de la requête. Utiliser OAuth2.0 dans WeChatAprès avoir compris les principes de base d'OAuth2.0, examinons comment OAuth2.0 est utilisé dans WeChat. Supposons un scénario?: l'utilisateur accède à un compte public WeChat, puis ouvre une page Web de jeu dans le navigateur intégré WeChat via le lien dans le message. Ce jeu nécessite que l'utilisateur se connecte et enregistre le score de jeu de l'utilisateur. . Nous avons deux manières de gérer cette situation?: Permettre aux utilisateurs de s'inscrire et de se connecter sur la page Web (et ils devront peut-être se reconnecter à chaque fois qu'ils ouvrent cette page Web, car WeChat a navigation intégrée (la durée de stockage des cookies du serveur est très courte), il s'agit bien s?r d'une conception très trompeuse. Utilisez OAuth2.0. Lorsque l'utilisateur accède à cette page, il détermine d'abord s'il est connecté. Dans le cas contraire, il accède automatiquement à la page d'autorisation OAuth2.0. Cette page effectue automatiquement la série de vérifications ABCD mentionnée ci-dessus, puis obtient l'OpenId de l'utilisateur. via EF et des informations encore plus détaillées (y compris l'avatar), terminez automatiquement le processus de connexion (ou d'enregistrement nécessaire), puis l'utilisateur entre directement dans le jeu dans l'état connecté. On peut voir que l'utilisation d'OAuth2.0 améliore considérablement l'expérience utilisateur et peut automatiquement lier et identifier l'OpenId WeChat de l'utilisateur. Il est à noter que la ? page d'autorisation OAuth2.0 ? mentionnée ci-dessus a également deux formes : Lorsque le Scope dans la requête A est snsapi_base, l'ensemble du processus d'autorisation s'y termine automatiquement. il n'y aura pas de page intermédiaire affichée sur le client de l'utilisateur, mais le résultat de l'autorisation ne peut obtenir que l'OpenId de l'utilisateur (que l'utilisateur ait ou non suivi l'utilisateur, bien s?r, si l'utilisateur suit l'utilisateur, utilisez à nouveau l'interface d'informations utilisateur dans l'interface avancée pour obtenir l'OpenId de l'utilisateur. L'information est également disponible, mais il y a quelques détours) Lorsque le Scope dans la requête A est snsapi_userinfo, une page d'autorisation doit être fournie (similaire à l'autorisation qui de nombreux sites Web utilisent des comptes Weibo et des comptes QQ pour se connecter) ), seulement après l'accord de l'utilisateur, les informations détaillées de l'utilisateur sont immédiatement obtenues. L'utilisateur ici peut être un utilisateur suivant ou un utilisateur non suivi, et le contenu renvoyé est le même. En d'autres termes, la méthode snsapi_base peut obtenir l'OpenId de l'utilisateur "sans que personne ne s'en aper?oive" et terminer de manière entièrement automatique le processus de connexion et d'enregistrement, mais la quantité d'informations est limitée par snsapi_userinfo qui nécessite que l'utilisateur l'autorise ; l'interface spécifiée, puis la complète automatiquement Pendant tout le processus, cette autorisation a une période de temps et l'utilisateur doit être interrogé à nouveau après l'expiration du délai. Interface Senparc.Weixin.MP OAuth2.0 Dossier du fichier source?: Senparc.Weixin.MP/AdvancedAPIs/OAuth Les méthodes pertinentes dans le code source sont les suivantes :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),只能獲取用戶(hù)openid /// </summary> snsapi_base, /// <summary> /// 彈出授權(quán)頁(yè)面,可通過(guò)openid拿到昵稱(chēng)、性別、所在地。并且,即使在未關(guān)注的情況下,只要用戶(hù)授權(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ā)送之后,客戶(hù)會(huì)得到授權(quán)頁(yè)面,無(wú)論同意或拒絕,都會(huì)返回redirectUrl頁(yè)面。 * 如果用戶(hù)同意授權(quán),頁(yè)面將跳轉(zhuǎn)至 redirect_uri/?code=CODE&state=STATE。這里的code用于換取access_token(和通用接口的access_token不通用) * 若用戶(hù)禁止授權(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ù),每次用戶(hù)授權(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">填寫(xiě)通過(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); } } }Pour des exemples de méthodes spécifiques, voir Senparc.Weixin.MP.Sample/Controllers/OAuth2Controller.cs, ainsi que le code de la vue correspondante. RemarqueVous devez disposer d'un compte de service authentifié pour utiliser l'interface OAuth. L'AccessToken utilisé dans l'interface et l'AccessToken utilisé dans l'interface avancée (y compris l'interface commune) ne sont pas liés l'un à l'autre, même s'ils sont obtenus via les mêmes AppId et Secret.
La page d'autorisation officielle actuelle n'est pas stable à 100%. Parfois, il faut quelques clics supplémentaires pour passer sans problème. Si vous rencontrez une telle situation, vous devez porter certains jugements et faire des demandes répétées, au moins en surface, aux utilisateurs. je ne peux pas voir la page d'erreur.
Pour des raisons de sécurité, avant d'utiliser OAuth2.0, vous devez saisir [Mes services] dans le backend WeChat pour définir le nom de domaine de la page de rappel?:
Pour plus de développement de la plateforme publique WeChat?: instructions OAuth2.0, veuillez faire attention au site Web PHP chinois pour les articles connexes?!

Outils d'IA chauds

Undress AI Tool
Images de déshabillage gratuites

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Clothoff.io
Dissolvant de vêtements AI

Video Face Swap
échangez les visages dans n'importe quelle vidéo sans effort grace à notre outil d'échange de visage AI entièrement gratuit?!

Article chaud

Outils chauds

Bloc-notes++7.3.1
éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)