認証は、ユーザーの個人情報、写真、動画、連絡先リストなどのサードパーティ製のアプリケーションは、ユーザーがリソースのウェブサイトにユーザーへの安全かつ標準的な方法を得ることを可能にすることができますオープンプロトコル、モバイルやデスクトップアプリケーションの保存された部門名(あります)、サードパーティのアプリケーションにユーザー名とパスワードを必要とせず。
収集し、リビングルームに、Webアプリケーション、デスクトップアプリケーションやデバイスのための特別な認証プロセスを提供しながら、OAuth2.0は、クライアント開発者のしやすさに焦点を当て、アップグレードされたバージョンのOAuthプロトコルです。
OAuthのは、ユーザーが特定のサービスプロバイダに保存されたデータにアクセスするためのユーザー名とパスワードの代わりにトークンを提供することができます。各トークンは、特定のWebサイトには、指定された期間内のリソースを備えてアクセスを許可されています。このようなのOauthができるアクセスサードパーティのサイトに許可されたユーザー情報は、全てのコンテンツや自分のデータのための彼らのアクセス権限を共有せず、別のサービスプロバイダに保存されます。
承認プロセス:
- マイクロチャネルパブリックアカウントに関心のある方
- 「 - インタフェース権限 - Webサービス - ウェブアカウント - 。ユーザーに関する情報を取得するためのWeb認証開発」設定オプションを、承認コールバックのドメイン名を変更してくださいマイクロチャネルパブリックアカウントには、(開発者が最初の公式のウェブサイトのための最初の公共のプラットフォームを来る必要がユーザー要求の認証ページのURLを提供します代わりに、URLのドメイン名がここで満たされていることに注意してください(文字列)、ので、HTTPを追加しないでください://プロトコルヘッダ、等。)
- ユーザーがサーバーにリクエストを送信し、認証ページのURLをクリック
- マイクロチャネルパブリックアカウントにユーザーの同意(そのような手順の範囲はsnapi_baseされていない)場合、サーバーは、依頼します
- ユーザーは、(スコープはそのようなステップsnapi_baseではありません)に同意し\
- サーバは、コールバックコードパブリックマイクロチャンネル番号を通過し
- マイクロチャネルパブリックアカウントの取得コード
- アクセストークンコードを介してサーバへの公開のマイクロチャネル番号要求
- アクセストークンとOpenIDサーバは、パブリックマイクロチャンネル番号に戻りました
- アクセストークン(そのようなスコープがsnsapi_baseされていない段階)を介してサーバへのマイクロチャネルパブリックアカウントユーザ情報要求
- サーバのユーザ情報は、マイクロチャネルパブリックアカウントを与えるであろう(そのような手順の範囲はsnsapi_baseされていません)
3)を達成:
認定されたリンクは、ユーザーにプッシュ:
elifのでisinstance(recMsg、ReceiveTextMsg): #测试のOauth认证 コンテンツ= " <A HREF =" https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx349372b8988f6776&redirect_uri=http://ahmay.ngrok2。 xiaomiqiu.cn/&response_type=code&scope=snsapi_base&state=1#wechat_redirect "> ' \ ' 单击这里体验のOAuth授权</a>の「 #ReplyMsgと= ReplyTextMsg(recMsg.FromUserName、recMsg.ToUserName、recMsg.Content) ReplyMsgと= ReplyTextMsg( recMsg.FromUserName、recMsg.ToUserName、コンテンツ)
範囲:
snsapi_base:リンクをクリックすると、ページが認証をポップアップしません
snsapi_userinfo:リンクをクリックした後、ページが認証をポップアップ表示されます
クリックすると、コードと状態パラメータを含むリンクリダイレクトは(開発者は、任意の状態パラメータで埋めることができます)
コード変更を使用して8)を実装access_tokenは
デフ(コード)exchange_access_token: exchange_url = ' https://api.weixin.qq.com/sns/oauth2/access_token?appid={0}&secret={1}&code={2}&grant_type=authorization_code ' .format( wechat_Const.appId、wechat_Const.appSecret、コード ) 応答 = requests.get(exchange_url) リターン json.loads(response.text)
戻り値:
{ ' access_tokenは ': '28_HVHo_-O6ijddWk2tesCOoyNQZOBudlByenwX5s9jTQxaz5bl5MEDXOGyM_UnP83FMiZv8L85EHjo2atet3Dgf_1HJy4yzZnMPz5Aci3kEwo'、 'expires_in':7200、' refresh_token ': '28_a3YKiuKaeQhx5rGx9jCYn6NyrFycQwBgq25ofsIiqYWf0lcn2VL3uNqK6LgKBLwEgZiNGCKrAATn5QqDgAzVBP9-pwn9nheMRXogEe_jxrM'、 'のOpenID': 'O-TXmsiCVUNT0iDRRaiW8iTxhx4Q'、' スコープ ': 'snsapi_userinfo'}
access_tokenは有効期限が切れると、あなたはrefresh_tokenにリフレッシュを使用することができ、再認証するためにユーザーが必要な、長い期間(7日、30日、60日、90日)、refresh_token故障しているrefresh_token。
デフ(refresh_token)refresh_access_token: refresh_url = ' https://api.weixin.qq.com/sns/oauth2/refresh_token?appid={0}&grant_type=refresh_token&refresh_token={1} ' .format( wechat_Const.appId、refresh_token ) 応答 = requests.get(refresh_url) リターン json.loads(response.text)
戻るJSON同じデータ形式。
access_tokenは(snsapi_userinfoの範囲)を使用してユーザ情報を取得する)10を達成
デフ query_userinfo(access_tokenは、OpenIDの、LANG = ' zh_CNに' ): query_url = ' https://api.weixin.qq.com/sns/userinfo?access_token={0}&openid={1}&lang={2} ' .format( access_tokenは、OpenIDの、LANG ) 応答 = requests.get(query_url) リターン json.loads(response.content)
練習の妥当性を検証access_tokenは:
デフvery_access_token_valid(access_tokenは、OpenIDの): very_url = ' https://api.weixin.qq.com/sns/auth?access_token={0}&openid={1} ' .format(access_tokenは、OpenIDの) 応答 = requests.get(very_url) 結果 = json.loads(response.text) もし結果[ ' ERRCODE ' ] == 0: リターントゥルー 他: リターン偽