国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

SaaS化實踐——如何用一個微信公眾號登錄多個不同的域名

alanoddsoff / 904人閱讀

摘要:微信登錄的核心代碼依然采用這個庫。核心概念表結構中控機中控機為同一引導用戶登錄的微信登錄服務器,其中此機器做的為截圖部分的,引導用戶授權,微信回調到此中控機,拿到。微信回調到后,拿著,跳轉到對應的客戶域名。

背景

SaaS 作為一種服務,需要為不同的客戶定制不同的域名以滿足客戶定制化的需求。而微信登錄時需要填寫一個回調地址,單一的回調地址是難以處理多客戶域名的業務需求的,經過不同的 SaaS 項目的實踐,總結出了下面的方式。

微信登錄的核心代碼依然采用 psa 這個庫 https://github.com/python-soc...。

微信說明

閱讀微信公眾平臺文檔,可以看到,當同一個微信公眾號需要在多個服務間使用時,微信的建議是提供一臺中控服務器,防止access_token的重復刷新,這個坑確實踩到過。

oauth 2.0

https://tools.ietf.org/html/r...

核心概念、表結構 中控機

中控機為同一引導用戶登錄的微信登錄服務器,其中此機器做的為 oauth 2.0 截圖部分的 A、B,引導用戶授權,微信回調到此中控機,拿到code。
中控機通過state參數,解出customerid,根據customer配置找到回調地址。回調是將state,code帶去回調的客戶域名。

customer

customer表需要記錄微信的appid,appsecret,這樣即使客戶需要定制自己的微信公眾號,中控機也可以saas化。

redirecturl

由于微信的state參數長度有限,因此提供一張redirecturl表記錄回調地址,登錄時只需要將redirecturl_id帶入state中即可。redirecturl記錄的為回調客戶域名+psa complete地址的完整路由。

state

state為oauth 2.0中允許的回調參數,state的構成為: 客戶id,回調地址id,其他需要回調參數

核心流程

核心代碼

中控機通過customer獲取對應的appid,secret。微信回調到cherrypick后,拿著code,state跳轉到對應的客戶域名。

def _auth(request, backend):
    cid = request.GET["cid"]
    # TODO: DoesNotExist
    customer = Customer.objects.get(id=cid)
    appid, appsecret = customer.get_key_and_secret()
    log.info("login cid:%s, key:%s", cid, appid)
    def get_key_and_secret():
        return appid, appsecret
    request.backend.get_key_and_secret = get_key_and_secret
    return do_auth(request.backend)

@never_cache
@psa("our_social:cherrypick")
def auth(request, backend, key=""):
    return _auth(request, backend)
    
@never_cache
@psa()
def cherrypick(request, backend):
    code = request.GET.get("code", "")
    state = request.GET.get("state", "")
    redirect_url_id = state.split(",")[0]
    redirect_url = RedirectURL.objects.get(id=redirect_url_id).url
    redirect_url = "{}?code={}&state={}".format(redirect_url, code, state)
    log.info("cherrypick, redirect_url: %s, state: %s", redirect_url, state)
    return redirect(redirect_url)    

SaaS 服務器處理 oauth 2.0 C、D之后的步驟

@psa("our_social:complete")
def complete(request, backend, *args, **kwargs):
    """Authentication complete view"""
    logout(request)
    state = request.GET.get("state", "") 
    ......
    state解析出cid等參數
    customer = Customer.objects.get(id=cid)
    appid, appsecret = product.get_key_and_secret()
    request._customer = customer
    覆蓋backend的方法
    def get_key_and_secret():
        log.info("login complete use appid: %s %s", appid, state)
    request.backend.get_key_and_secret = get_key_and_secret
    return do_complete(request.backend, _do_login, request.user,
                       redirect_name=REDIRECT_FIELD_NAME, request=request,
                       *args, **kwargs)

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/43031.html

相關文章

  • 走進身份管理-IAM/IDaaS

    摘要:企業通過微信微博等為消費者提供社交認證或其他更多第三方身份提供商。支持多樣身份提供方案良好的身份管理解決方案應該支持幾乎所有流行的身份來源。易于遷移應支持移入和移出身份管理解決方案而不受限 IDaaS 身份即服務是隨著云計算發展起來的新軟件即服務。 showImg(https://segmentfault.com/img/remote/1460000020177039?w=800&h=...

    gghyoo 評論0 收藏0
  • 企業只能申請兩個微信公眾微信開發不夠用?不,一個公眾就夠了!

    摘要:微信年月日發公告稱,個人主體注冊公眾號數量上限由個調整為個。大家都知道每個微信公眾號在進行開發時,授權回調的域名只能設置一個,正常的開發一般一套環境就對應一個域名。 微信2018年11月16日發公告稱,個人主體注冊公眾號數量上限由2個調整為1個。企業類主體注冊公眾號數量上限由5個調整為2個。這個對馬上要注冊公眾號的企業來說頓時心情不好了。 大家都知道每個微信公眾號在進行開發時,授權回調...

    wthee 評論0 收藏0
  • 最詳細微信公眾搭建一條龍

    摘要:因為微信公眾號是騰訊云的,所以強烈推薦騰訊云。購買成功后,可以看到如下界面選購域名因為服務器對外使用,要么直接用,要么綁定一個域名,而微信公眾號必須要綁定域名,因此,提前注冊一個域名吧。 node 跑通 微信公眾號 開發者功能 關鍵字: node express 服務器 域名 centos 微信公眾號 自定義 開發 nginx 文末 擴展 有驚喜!!! 好玩的功能 文末 擴展 有驚喜...

    ztyzz 評論0 收藏0

發表評論

0條評論

alanoddsoff

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<