-------オープンプラットフォームAPIインターフェイスの設計に基づくOAuth2.0契約

1.はじめにOAuth

http://www.ruanyifeng.com/blog/2019/04/oauth_design.html  何OAuthのでしょうか?

http://www.ruanyifeng.com/blog/2019/04/oauth-grant-types.html  のOAuth 4つのライセンス

一般的にはすぐに一定のマイクロ手紙、権限のない状態で、入力するユーザー名、パスワード、そして唯一のアクセストークンを必要としない、期限切れあなたがにアクセスする必要がありますすることができ、このようなサードパーティ製システムとして、関節の着陸に使用。

2、https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140842  パブリックのドキュメントのためのマイクロチャネル技術プラットフォームは以下のとおりです。

ステップ1:ユーザーの同意、アクセスコード

ステップ2:承認access_tokenは引き換えにコードページ

ステップ3:access_tokenはリフレッシュ(必要な場合)

4第四工程:(必須スコープsnsapi_userinfoとして)ユーザ情報を引っ張っ

5添付ファイル:認証資格情報(access_tokenはを)チェックが有効です

 

3、簡単な小さな例:

パッケージcom.zfb.api.controller。

インポートのjavax.servlet.http.HttpServletRequest; 

輸入org.springframework.beans.factory.annotation.Autowired;
輸入org.springframework.beans.factory.annotation.Value。
輸入org.springframework.stereotype.Controller。
輸入org.springframework.web.bind.annotation.RequestMapping。
輸入org.springframework.web.bind.annotation.ResponseBody。

輸入com.alibaba.fastjson.JSONObject。
輸入com.zfb.base.Response。
輸入com.zfb.utils.HttpClientUtils。
輸入com.zfb.utils.WeiXinUtils。

@Controller 
パブリック クラスOauthController 延び応答{ 

    @Autowired 
    プライベート; WeiXinUtils weiXinUtils
     プライベート文字列errorPageでは= "errorPageでは" ; 

    // 権限リンク生成 
    @RequestMapping( "/ authorizedUrl" パブリック文字列authorizedUrl(){
         リターン "リダイレクト" + weiXinUtils.getAuthorizedUrl(); 
    } 

    // マイクロチャネル認可コールバック・アドレス 
    @RequestMapping(「/コールバック」パブリック文字列コールバック(文字コード、HttpServletRequestの要求){
         // 1.コードがaccess_tokenは入手 
        文字列= accessTokenUrlweiXinUtils.getAccessTokenUrl(コード); 
        JSONObject resultAccessToken = HttpClientUtils.httpGet(accessTokenUrl);
         ブールのcontainsKey = resultAccessToken.containsKey( "ERRCODE" ); 

        IF (のcontainsKey){ 
            (request.setAttribute "errorMsg内容"、 "システムエラー!" );
             リターンerrorPageでは; 
        } 
        // 使用してユーザ情報を取得access_tokenは2 
        列= resultAccessToken.getString accessToken( "access_tokenは" ;)
        文字列のOpenID = resultAccessToken.getString( "OpenIDの" );
         // (必須スコープsnsapi_userinfoなど)3.引っ張るユーザ情報を
        ストリングuserInfoUrl = weiXinUtils.getUserInfo(accessToken、OpenIDの)。
        JSONObject userInfoResult = HttpClientUtils.httpGet(userInfoUrl)。
        System.out.println( "userInfoResult:" + userInfoResult)。
        request.setAttribute( "ニックネーム"、userInfoResult.getString( "ニックネーム" )); 
        request.setAttribute( "都市"、userInfoResult.getString( "都市" )); 
        request.setAttribute( "headimgurl"、userInfoResult.getString( "headimgurl" ));
        リターン「情報」
    } 

}

これは、マイクロチャネルを提供するために、リンクをカプセル化

@Component
 パブリック クラスWeiXinUtils { 
    @value( "$ {APPID}" プライベート文字列のAppID。
    @value( "$ {}秘密" プライベートの秘密の文字列。
    @value( "$ {redirecturi}" プライベート文字列redirectUri。
    @value( "$ {authorizedUrl}" プライベート文字列authorizedUrl。
    @value( "$ {access_tokenは}" プライベート文字列accessToken。
    @value( "$ {}ユーザー情報" プライベート文字列のユーザー情報。

    
    パブリック文字列getAuthorizedUrl(){
         戻り authorizedUrl.replace( "APPID"、APPID).replace( "REDIRECT_URI" 、URLEncoder.encode(redirectUriを)); 
    } 
    
    // 生成accessToken 
    パブリックストリングgetAccessTokenUrl(文字コード){
         戻り accessToken.replaceを( "APPID"、APPID).replace( "SECRET"、秘密).replace( "コード" 、コード)。
    } 

    // 获取用户信息
    パブリックストリングgetUserInfo(文字列accessToken、文字列のOpenID){
         戻り userinfo.replace( "access_tokenは"、accessToken).replace( "OpenIDの" 、OpenIDの)。
    } 

}
WeiXinUtilsは、コンフィギュレーション・ファイルからの読み取りにリンクされています
AppIDを:wx5c43fde3c9733d9e 
シークレット:b8b217126c33a5fb7074927d5e72a81a 
redirectUri:http://127.0.0.1:8080/callback 
###は、マイクロチャネルの許可生成
authorizedUrl:https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID &REDIRECT_URIを = REDIRECT_URI &response_type =コード&スコープ = snsapi_userinfo &状態= STATE番号のwechat_redirect 
###取得コードの後、access_tokenは、以下のリンクを要求
access_tokenは:https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID &シークレット = SECRET コード& = CODE &grant_type = authorization_code 
###(必須スコープsnsapi_userinfoとして)ユーザ情報を引っ張っ
userinfo:https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN &OpenIDの =のOpenID&LANG = zh_CNに
 

 

 

おすすめ

転載: www.cnblogs.com/pickKnow/p/11271607.html