日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

OAuth對接實踐 - Windows應用

更新時間:

本章結合Demo代碼,介紹單租戶托管型應用免登及用戶信息獲取的相關流程。開發之前,請務必參考詳細的對接專題文檔。注:Demo代碼見文章底部,基于NetFramework 4.5 AspNet MVC技術。

1 獲取oauthcode

根據環境變量獲取到的appkey與請求頭獲取跳轉地址拼接鑒權URL并訪問該URL。如下圖:

 private static string appKey = Environment.GetEnvironmentVariable("IOT.HOSTING.APPKEY");

 [HttpGet]
 public ActionResult OAuthVerification()
 {
    redirectUrl = $@"http://{Request.Headers.Get("Host")}";
    var url = $"https://account.iot.aliyun.com/oauth2/auth?client_id={appKey}&redirect_uri={redirectUrl}&response_type=code";
    return new RedirectResult(url, false);
 }

鑒權URL會連接到Iot平臺進行相關驗證,成功后會根據{ redirectUrl }中的地址進行跳轉并攜帶code參數。該參數就是我們后續用到oauthcode參數。實際效果如下:

http://47.102.253.36:9090/?code=b27baa5b367baf46d6625989cadc87e7

注意:這里的redirectUrl需要與你的應用入口地址保持一致,否則會報invalid.authCode無效錯誤。你的應用入口地址在應用托管后臺-應用管理列表中可找到。如下:

image.png另外,一般我們的應用入口是登錄頁面與OAuth免登中的回調跳轉地址共用一個地址,所以可以通過是否有code參數判斷是否是OAuth回調跳轉,原有的登錄頁面也應該保留。

public ActionResult Index(string code)
{
   if (!string.IsNullOrWhiteSpace(code))
   {
      //如果有code參數,說明是登錄iot平臺驗證成功并跳轉到這里
      //實現免登邏輯放這里,比如:
      //1、根據GetUserInfoByAccessToken接口獲取Iot用戶信息并判斷該用戶在系統中對應的賬號
      //2、使用隨機或生成固定密碼實現免登,或者生成一個一段時間內有效的簽名sign實現免登
      currentAuthCode = code;
      return View("OAuthIndex");
    }
  return View();
}

2 獲取用戶信息

在調用getUserInfoByAccessToken接口前,需要先調用getAccessTokenByAuthCode接口,根據oauthcode換取accesscode。調用getAccessTokenByAuthCode接口代碼如下:

  [HttpPost]
   public string GetAccessCode(string path)
   {
     if (null != lastRequestResult)
     {
        //該接口只能調用一次,多次調用會失敗,所以直接返回上次調用的結果。
        return JsonConvert.SerializeObject(lastRequestResult);
     }
     var @params = new
     {
         //currentAuthCode即剛獲取到oauthcode
         @code = currentAuthCode,
         redirect_uri = redirectUrl,
         client_id = appKey,
         grant_type = "authorization_code"
      };
      //path為接口調用路徑
      var responseStr = SendRequest(path, @params, new { apiVer = "1.0.1" });
      lastRequestResult = JsonConvert.DeserializeObject<OAuthResult<GetAccessCodeResult>>(responseStr);
      return responseStr;
   }

之后根據已獲得的accesscode調用getUserInfoByAccessToken接口,獲取Iot平臺用戶信息(包含用戶手機號、用戶明、openId等),接口調用代碼如下:

[HttpPost]
public string GetUserInfoByAccessToken(string path)
{
   var responseStr = SendRequest(path, new { lastRequestResult.data.access_token }, new { apiVer = "1.0.2" });
   return responseStr;
}

3 實現免登

至此,我們拿到了Iot平臺用戶的相關信息,在系統應用中就可以判斷該用戶是否存在,是否是第一次登入系統等;來實現免登邏輯:a、如果用戶是首次登錄,則可以根據獲取到的Iot用戶信息在系統內創建賬號密碼與初始化賬戶相關的信息。b、如果用戶是首次登錄且需要收集用戶額外的信息,比如所屬企業信息,還可以展示一個收集信息的頁面,收集信息后再創建用戶賬戶信息。c、如果用戶是首次登錄,可以創建隨機的,讓用戶登入系統后提示其再修改密碼。也可以計算一個一段時間內有效的sign簽名實現免登。

4 示例Demo

下載地址:OAuth Demo for Windows