通過Dapr實現一個簡單的基於.net的微服務電商系統(九)——一步一步教你如何擼Dapr之OAuth2授權-百度版

  在上一篇文章中案例使用了github的oauht2.0授權,實際上使用哪個平臺並不侷限,只要平臺實現了oauth2.0標準都可以接入。本節我們聊聊如何集成百度oauth2.0。

  本來想集成微信/QQ/微博的,結果發現不是需要企業資質就是要個人認證,就百度開放平臺不需要,就用百度來演示吧。

  首先我們需要註冊並登錄百度開發者平臺,同時創建一個應用,獲取它的API Key和Secret Key

  進入應用詳情後在點擊左下角的安全設置,配置我們的鑑權域名【http://oauth.dapreshop.com:30882】到授權回調頁並禁用

 

 

    接着修改我們的component文件,錄入剛纔我們獲取的API Key和Secret Key到clientid和clientsecret一欄,並修改scopes、authURL、redirectURL如下所示,修改完畢後記得重新apply一下

apiVersion: dapr.io/v1alpha1
kind: Component
metadata:
  name: baiduauth
  namespace: dapreshop
spec:
  type: middleware.http.oauth2
  version: v1
  metadata:
  - name: clientId
    value: ""
  - name: clientSecret
    value: ""
  - name: scopes
    value: "basic"
  - name: authURL
    value: "http://openapi.baidu.com/oauth/2.0/authorize"
  - name: tokenURL
    value: "https://openapi.baidu.com/oauth/2.0/token"
  - name: redirectURL
    value: "http://oauth.dapreshop.com:30882"
  - name: authHeaderName
    value: "myauth"

  4、修改一下獲取用戶信息的代碼(這裏是演示所以百度返回的openid我取前n位做登錄名):

var model = new Model() { login = "" };
            if (HttpContextExt.Current.Headers.Any(x => x.Key.ToLower().Equals("myauth")))
            {
                var requestUri = new Uri($"https://openapi.baidu.com/rest/2.0/passport/users/getLoggedInUser?access_token={HttpContextExt.Current.Headers.FirstOrDefault(x => x.Key.ToLower().Equals("myauth")).Value.Replace("Bearer ", "")}");
                var result = await httpClientFactory.CreateClient().GetAsync(requestUri);
                if (result.IsSuccessStatusCode)
                {
                    var content = await result.Content.ReadAsStringAsync();
                    baidumodel obj = JsonSerializer.Deserialize<baidumodel>(content);
                    HttpContextExt.Current.Response.Cookies.Append("githubuser", JsonSerializer.Serialize(new Model() { login = obj.openid.Substring(0,8), name = obj.uname, avatar_url = $"http://tb.himg.baidu.com/sys/portraitn/item/{obj.portrait}" }),
                        new Microsoft.AspNetCore.Http.CookieOptions() { Domain = "dapreshop.com" });
                    HttpContextExt.Current.Response.Redirect("http://admin.dapreshop.com:30882");
                }
            }
            return model;

    重新啓動整個demo,這時候再次點擊圖標,我們會跳轉至百度的授權頁

  回跳後重新初始化就能看到我們取到了百度授權的用戶信息

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章