成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

SaaS化實(shí)踐——如何用一個(gè)微信公眾號(hào)登錄多個(gè)不同的域名

alanoddsoff / 947人閱讀

摘要:微信登錄的核心代碼依然采用這個(gè)庫。核心概念表結(jié)構(gòu)中控機(jī)中控機(jī)為同一引導(dǎo)用戶登錄的微信登錄服務(wù)器,其中此機(jī)器做的為截圖部分的,引導(dǎo)用戶授權(quán),微信回調(diào)到此中控機(jī),拿到。微信回調(diào)到后,拿著,跳轉(zhuǎn)到對(duì)應(yīng)的客戶域名。

背景

SaaS 作為一種服務(wù),需要為不同的客戶定制不同的域名以滿足客戶定制化的需求。而微信登錄時(shí)需要填寫一個(gè)回調(diào)地址,單一的回調(diào)地址是難以處理多客戶域名的業(yè)務(wù)需求的,經(jīng)過不同的 SaaS 項(xiàng)目的實(shí)踐,總結(jié)出了下面的方式。

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

微信說明

閱讀微信公眾平臺(tái)文檔,可以看到,當(dāng)同一個(gè)微信公眾號(hào)需要在多個(gè)服務(wù)間使用時(shí),微信的建議是提供一臺(tái)中控服務(wù)器,防止access_token的重復(fù)刷新,這個(gè)坑確實(shí)踩到過。

oauth 2.0

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

核心概念、表結(jié)構(gòu) 中控機(jī)

中控機(jī)為同一引導(dǎo)用戶登錄的微信登錄服務(wù)器,其中此機(jī)器做的為 oauth 2.0 截圖部分的 A、B,引導(dǎo)用戶授權(quán),微信回調(diào)到此中控機(jī),拿到code。
中控機(jī)通過state參數(shù),解出customerid,根據(jù)customer配置找到回調(diào)地址?;卣{(diào)是將state,code帶去回調(diào)的客戶域名。

customer

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

redirecturl

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

state

state為oauth 2.0中允許的回調(diào)參數(shù),state的構(gòu)成為: 客戶id,回調(diào)地址id,其他需要回調(diào)參數(shù)

核心流程

核心代碼

中控機(jī)通過customer獲取對(duì)應(yīng)的appid,secret。微信回調(diào)到cherrypick后,拿著code,state跳轉(zhuǎn)到對(duì)應(yīng)的客戶域名。

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 服務(wù)器處理 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等參數(shù)
    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)

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/43031.html

相關(guān)文章

  • 走進(jìn)身份管理-IAM/IDaaS

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

    gghyoo 評(píng)論0 收藏0
  • 企業(yè)只能申請(qǐng)兩個(gè)微信公眾號(hào),微信開發(fā)不夠用?不,一個(gè)公眾號(hào)就夠了!

    摘要:微信年月日發(fā)公告稱,個(gè)人主體注冊(cè)公眾號(hào)數(shù)量上限由個(gè)調(diào)整為個(gè)。大家都知道每個(gè)微信公眾號(hào)在進(jìn)行開發(fā)時(shí),授權(quán)回調(diào)的域名只能設(shè)置一個(gè),正常的開發(fā)一般一套環(huán)境就對(duì)應(yīng)一個(gè)域名。 微信2018年11月16日發(fā)公告稱,個(gè)人主體注冊(cè)公眾號(hào)數(shù)量上限由2個(gè)調(diào)整為1個(gè)。企業(yè)類主體注冊(cè)公眾號(hào)數(shù)量上限由5個(gè)調(diào)整為2個(gè)。這個(gè)對(duì)馬上要注冊(cè)公眾號(hào)的企業(yè)來說頓時(shí)心情不好了。 大家都知道每個(gè)微信公眾號(hào)在進(jìn)行開發(fā)時(shí),授權(quán)回調(diào)...

    wthee 評(píng)論0 收藏0
  • 最詳細(xì)微信公眾號(hào)搭建一條龍

    摘要:因?yàn)槲⑿殴娞?hào)是騰訊云的,所以強(qiáng)烈推薦騰訊云。購買成功后,可以看到如下界面選購域名因?yàn)榉?wù)器對(duì)外使用,要么直接用,要么綁定一個(gè)域名,而微信公眾號(hào)必須要綁定域名,因此,提前注冊(cè)一個(gè)域名吧。 node 跑通 微信公眾號(hào) 開發(fā)者功能 關(guān)鍵字: node express 服務(wù)器 域名 centos 微信公眾號(hào) 自定義 開發(fā) nginx 文末 擴(kuò)展 有驚喜?。?! 好玩的功能 文末 擴(kuò)展 有驚喜...

    ztyzz 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<