寫個OAuth2.0的請求端來測試本身的OAuth2.0服務端(二)

上一篇文章中,咱們介紹了怎麼建立本身的服務器,如今咱們開始寫個client端,來測試。html

 

咱們建立一個MVC項目,叫TestOAuthClientgit

1. 代碼開始github

1)第一步,咱們建立一個MainController,在Index方法裏面寫咱們的邏輯。瀏覽器

2)首先獲取code,若是沒有code,則證實是第一步請求。服務器

3)第一步請求,附上client_id、response_type、redirect_uri、scope、state參數。測試

這裏咱們假如服務端的第一步請求認證的地址爲:http://localhost:65006/OAuth2Server/Authorizethis

     client_id是請求端在服務端申請的id;url

     response_type爲code;spa

     redirect_uri是告訴服務端,獲取code以後返回的地址是什麼;3d

     scope自定義;

     state自定義。

4)跳轉到驗證服務器。

5)驗證服務器重定向會咱們的請求端後(code不爲空),請求獲取token。

獲取token須要傳送返回的code、grant_type=authorization_code、client_id、client_secret

6)經過服務器返回的token,請求服務端獲取用戶信息。

代碼就幾行,以下:

        public ActionResult Index()
        {
            string code = Request["code"] ?? "";

            if (string.IsNullOrEmpty(code))
            {
                //第一步,請求獲取code(請求OAuth服務器)
                string client_id = "testclientid";
                string response_type = "code";
                string redirect_uri = HttpUtility.UrlEncode("http://localhost:61481/Main/Index");
                string scope = "";
                string state = "";
                string url = string.Format
                    ("http://localhost:65006/OAuth2Server/Authorize?client_id={0}&response_type={1}&redirect_uri={2}&scope={3}&state={4}",
                   client_id, response_type, redirect_uri, scope, state);
                Response.Redirect(url);
                return null;
            }
            else
            {
                //第二步,獲取code以後請求獲取token(請求OAuth服務器)
                RestClient clientToken = new RestClient("http://localhost:65006/OAuth2Server/GetToken");
                IRestRequest requestToken = new RestRequest();
                requestToken.AddParameter("code", code);
                requestToken.AddParameter("grant_type", "authorization_code");
                requestToken.AddParameter("client_id", "testclientid");
                requestToken.AddParameter("client_secret", "testclientsecret");
                IRestResponse responseToken = clientToken.Execute(requestToken);
                string access_token = responseToken.Content.Replace("\"", "");

                //第三部,獲取token以後,獲取user信息(請求OAuth服務器)
                RestClient clientUserInfo = new RestClient("http://localhost:65006/OAuth2Server/UserInfo");
                IRestRequest requestUserInfo = new RestRequest();
                requestUserInfo.AddParameter("oauth_token", access_token);
                IRestResponse responseUserInfo = clientUserInfo.Execute(requestUserInfo);
                string userInfoContent = responseUserInfo.Content;
                //返回獲取到的用戶信息
                return this.Json("userInfoContent=" + userInfoContent, JsonRequestBehavior.AllowGet);
            }
        }

 

源代碼以下: https://github.com/cjt321/TestOAuthClient/

 

2. 開始調試

1)請求端(TestOAuthClient)的地址爲:http://localhost:61481/Main/Index

2)在瀏覽器上輸入上面地址,會重定向到用戶是否容許受權的頁面。(此頁面是服務端的頁面)

image

當咱們輸入正確的用戶名&密碼以後,會發現,再請求端能獲取到用戶的信息。

到此,測試結束。

 

能夠關注本人的公衆號,多年經驗的原創文章共享給你們。

相關文章
相關標籤/搜索