add post
This commit is contained in:
		
							
								
								
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							@@ -20,3 +20,4 @@ atproto
 | 
				
			|||||||
oauth_old
 | 
					oauth_old
 | 
				
			||||||
oauth_example
 | 
					oauth_example
 | 
				
			||||||
my-blog/static/oauth/assets/comment-atproto*
 | 
					my-blog/static/oauth/assets/comment-atproto*
 | 
				
			||||||
 | 
					*.lock
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										65
									
								
								my-blog/content/posts/2025-06-19-oauth.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										65
									
								
								my-blog/content/posts/2025-06-19-oauth.md
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,65 @@
 | 
				
			|||||||
 | 
					---
 | 
				
			||||||
 | 
					title: "oauthに対応した"
 | 
				
			||||||
 | 
					slug: "oauth"
 | 
				
			||||||
 | 
					date: 2025-06-19
 | 
				
			||||||
 | 
					tags: ["atproto"]
 | 
				
			||||||
 | 
					draft: false
 | 
				
			||||||
 | 
					---
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					現在、[syu.is](https://syu.is)に[atproto](https://github.com/bluesky-social/atproto)をselfhostしています。
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					oauthを`bsky.social`, `syu.is`ともに動くようにしました。
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					ここでいうselfhostは、pds, plc, bsky, bgsなどを自前のserverで動かし、連携することをいいいます。
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					ちなみに、atprotoは[bluesky](https://bsky.app)のようなものです。
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					ただし、その内容は結構複雑で、`at://did`の仕組みで動くsnsです。
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					usernameは`handle`という`domain`の形を採用しています。
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					didの名前解決をしているのが`plc`です。pdsがuserのdataを保存しています。timelineに配信したり表示しているのがbsky, bgsです。
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## oauthでハマったところ
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					現在、`bsky.team`のpds, plc, bskyには`did:plc:6qyecktefllvenje24fcxnie`が登録されています。これは`syu.is`の`@ai.syui.ai`のアカウントです。
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```sh
 | 
				
			||||||
 | 
					$ did=did:plc:6qyecktefllvenje24fcxnie
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					$ curl -sL https://plc.syu.is/$did|jq .alsoKnownAs
 | 
				
			||||||
 | 
					[ "at://ai.syui.ai" ]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					$ curl -sL https://plc.directory/$did|jq .alsoKnownAs
 | 
				
			||||||
 | 
					[ "at://ai.syu.is" ]
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					しかし、みて分かる通り、pds, plcは`@ai.syu.is`で登録されており、handle-changeが更新されていないようです。
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```sh
 | 
				
			||||||
 | 
					$ handle=ai.syui.ai
 | 
				
			||||||
 | 
					$ curl -sL "https://syu.is/xrpc/com.atproto.identity.resolveHandle?handle=$handle" | jq -r .did
 | 
				
			||||||
 | 
					$ curl -sL "https://bsky.social/xrpc/com.atproto.identity.resolveHandle?handle=$handle" | jq -r .did
 | 
				
			||||||
 | 
					$ curl -sL "https://public.api.bsky.app/xrpc/com.atproto.identity.resolveHandle?handle=$handle" | jq -r .did
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					oauthは、そのままではbsky.teamのpds, plcを使って名前解決を行います。この場合、まず、それらのserverにdidが登録されている必要があります。
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					次に、handleの更新が反映されている必要があります。もし反映されていない場合、handleとpasswordが一致しません。
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					localhostではhandleをdidにすることで突破できそうでしたが、本番環境では難しそうでした。
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					なお、[@atproto/oauth-provider](https://github.com/bluesky-social/atproto/tree/main/packages/oauth/oauth-provider)の本体を書き換えて、pdsで使うと回避は可能だと思います。
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					私の場合は、その方法は使わず、didの名前解決には自前のpds, plcを使用することにしました。
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```js
 | 
				
			||||||
 | 
					this.oauthClient = await BrowserOAuthClient.load({
 | 
				
			||||||
 | 
					        clientId: this.getClientId(),
 | 
				
			||||||
 | 
					        handleResolver: pdsUrl,
 | 
				
			||||||
 | 
					        plcDirectoryUrl: pdsUrl === 'https://syu.is' ? 'https://plc.syu.is' : 'https://plc.directory',
 | 
				
			||||||
 | 
					});
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -493,6 +493,7 @@ article.article-content {
 | 
				
			|||||||
.article-body {
 | 
					.article-body {
 | 
				
			||||||
    color: #1f2328;
 | 
					    color: #1f2328;
 | 
				
			||||||
    line-height: 1.6;
 | 
					    line-height: 1.6;
 | 
				
			||||||
 | 
									padding-bottom: 200px;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.article-body h1, .article-body h2, .article-body h3 {
 | 
					.article-body h1, .article-body h2, .article-body h3 {
 | 
				
			||||||
@@ -1007,6 +1008,7 @@ article.article-content {
 | 
				
			|||||||
    /* Article content mobile optimization */
 | 
					    /* Article content mobile optimization */
 | 
				
			||||||
    .article-body {
 | 
					    .article-body {
 | 
				
			||||||
        overflow-x: hidden;
 | 
					        overflow-x: hidden;
 | 
				
			||||||
 | 
													padding-bottom: 50px;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    .article-body pre {
 | 
					    .article-body pre {
 | 
				
			||||||
@@ -1071,3 +1073,8 @@ article.article-content {
 | 
				
			|||||||
        padding: 0;
 | 
					        padding: 0;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					img {
 | 
				
			||||||
 | 
					    width: 100%;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										
											BIN
										
									
								
								my-blog/static/img/atproto_oauth_syuis.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								my-blog/static/img/atproto_oauth_syuis.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| 
		 After Width: | Height: | Size: 256 KiB  | 
@@ -48,7 +48,7 @@ body {
 | 
				
			|||||||
  /* align-items: center; */
 | 
					  /* align-items: center; */
 | 
				
			||||||
  max-width: 800px;
 | 
					  max-width: 800px;
 | 
				
			||||||
  margin: 0 auto;
 | 
					  margin: 0 auto;
 | 
				
			||||||
  padding: 20px 0;
 | 
					  padding: 45px 0;
 | 
				
			||||||
  width: 100%;
 | 
					  width: 100%;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -1206,4 +1206,4 @@ body {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
.record-actions {
 | 
					.record-actions {
 | 
				
			||||||
  flex-shrink: 0;
 | 
					  flex-shrink: 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user