這篇文章詳細介紹了僅使用 Vanilla JavaScript 將 Bluesky Authentication (OAuth DPoP) 整合到無伺服器客戶端應用程式中。 由於令牌過期,這是一個概念圖,而不是一個功能齊全的範例。
簡介
我們將探索如何在 JavaScript 應用程式中實作 Bluesky 身份驗證,而不依賴外部框架。
免責聲明
這是一個示範該過程的教學。 由於身份驗證令牌的短暫性,它不能作為獨立、永久工作的範例。 請報告任何錯誤。
OAuth 驗證
對於需要用戶身份驗證的無伺服器應用程序,我們可以利用 Bluesky 等第三方權威機構。 這使用 OAuth 2.0 協定。 有關 Bluesky OAuth 實現的更多詳細信息,請參閱 OAuth - AT 協議文件。
客戶端元資料
要使用 Bluesky 驗證,我們的應用程式需要被 Bluesky 的身份驗證伺服器識別。這是透過包含應用程式資訊的客戶端元資料檔案(例如 client-metadata.json
)來實現的。 這允許自動客戶端註冊,無需手動伺服器註冊。 元資料檔案必須可透過 HTTPS 存取。
範例元資料檔(可在https://www.php.cn/link/db817217c5d9b196aa39cfeb0ce889e4存取):
{ "client_id":"https://www.php.cn/link/db817217c5d9b196aa39cfeb0ce889e4", "application_type":"web", "grant_types":[ "authorization_code", "refresh_token" ], "scope":"atproto transition:generic transition:chat.bsky", "response_types":[ "code id_token", "code" ], "redirect_uris":[ "https://madrilenyer.neocities.org/bsky/oauth/callback/" ], "dpop_bound_access_tokens":true, "token_endpoint_auth_method":"none", "client_name":"Madrilenyer Example Browser App", "client_uri":"https://madrilenyer.neocities.org/bsky/" }
此檔案描述了我們在 Bluesky 驗證伺服器上的應用程式。
核心驗證要求
要對使用者進行身份驗證,我們至少需要他們的 Bluesky 句柄。 該句柄是 Bluesky 個人資料 URL 中 https://bsky.app/profile/
.
檢索使用者資料
-
檢索 DID:給定使用者的句柄,我們可以使用 API 呼叫(例如
https://bsky.social/xrpc/com.atproto.identity.resolveHandle?handle=<handle></handle>
)來取得他們的去中心化識別碼 (DID)。 -
檢索 DID 文件: 使用 DID,我們從 PLC API (
https://plc.directory/<did></did>
) 檢索 DID 文件。 此文件包含使用者的 PDS(個人資料伺服器)URL。 -
檢索 PDS 元資料: PDS URL(DID 文件中的
serviceEndpoint
)用於從/.well-known/oauth-protected-resource
取得 PDS 元資料。此元資料提供授權伺服器 URL。 -
授權伺服器發現: 授權伺服器 URL 用於從
/.well-known/oauth-authorization-server
檢索其元資料。 此元資料包含關鍵端點,例如授權端點、令牌端點和推送授權請求 (PAR) 端點。
後續步驟涉及使用發現的端點和 PKCE(代碼交換證明金鑰)獲取使用者的存取權杖、涉及 PAR 請求的過程、用於增強安全性的 DPoP(演示所有權證明)以及處理重定向。 雖然為簡潔起見而省略了這些步驟的詳細 Javascript 程式碼,但它們將涉及進行多個 API 呼叫並處理回應。 官方 Bluesky TypeScript 用戶端是生產應用程式的更強大且推薦的替代方案。
以上是Bluesky OAuthlient,使用 Vanilla JavaScript的詳細內容。更多資訊請關注PHP中文網其他相關文章!

JavaScript字符串替換方法詳解及常見問題解答 本文將探討兩種在JavaScript中替換字符串字符的方法:在JavaScript代碼內部替換和在網頁HTML內部替換。 在JavaScript代碼內部替換字符串 最直接的方法是使用replace()方法: str = str.replace("find","replace"); 該方法僅替換第一個匹配項。要替換所有匹配項,需使用正則表達式並添加全局標誌g: str = str.replace(/fi

簡單JavaScript函數用於檢查日期是否有效。 function isValidDate(s) { var bits = s.split('/'); var d = new Date(bits[2] '/' bits[1] '/' bits[0]); return !!(d && (d.getMonth() 1) == bits[1] && d.getDate() == Number(bits[0])); } //測試 var

本文探討如何使用 jQuery 獲取和設置 DOM 元素的內邊距和外邊距值,特別是元素外邊距和內邊距的具體位置。雖然可以使用 CSS 設置元素的內邊距和外邊距,但獲取準確的值可能會比較棘手。 // 設定 $("div.header").css("margin","10px"); $("div.header").css("padding","10px"); 你可能會認為這段代碼很

本文探討了十個特殊的jQuery選項卡和手風琴。 選項卡和手風琴之間的關鍵區別在於其內容面板的顯示和隱藏方式。讓我們深入研究這十個示例。 相關文章:10個jQuery選項卡插件

發現十個傑出的jQuery插件,以提升您的網站的活力和視覺吸引力!這個精選的收藏品提供了不同的功能,從圖像動畫到交互式畫廊。讓我們探索這些強大的工具:相關文章:1

HTTP-Console是一個節點模塊,可為您提供用於執行HTTP命令的命令行接口。不管您是否針對Web服務器,Web Serv

本教程向您展示瞭如何將自定義的Google搜索API集成到您的博客或網站中,提供了比標準WordPress主題搜索功能更精緻的搜索體驗。 令人驚訝的是簡單!您將能夠將搜索限制為Y

當div內容超出容器元素區域時,以下jQuery代碼片段可用於添加滾動條。 (無演示,請直接複製到Firebug中) //D = document //W = window //$ = jQuery var contentArea = $(this), wintop = contentArea.scrollTop(), docheight = $(D).height(), winheight = $(W).height(), divheight = $('#c


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

禪工作室 13.0.1
強大的PHP整合開發環境

SublimeText3漢化版
中文版,非常好用

SublimeText3 Linux新版
SublimeText3 Linux最新版

記事本++7.3.1
好用且免費的程式碼編輯器

Dreamweaver CS6
視覺化網頁開發工具