PLCに間違ったverificatonMethodsを書き込んでしまったら
上記で書いたようにセルフホストPDSからBluesky公式PDSに戻る過程でPLC Directoryに間違ったverificationMethodsを書き込んでしまい(まずよく分かっていなかった)、Blueskyにログインはできてもまったく操作不能なうえにgoatコマンドによるPLC操作も https://boat.kelinci.net/plc-applicator での操作も全てBadJwtSignature > jwt signature does not match jwt issuer になってしまうようになりどうしようもなくなっていました。(通常のPDSではなんとかなるものがBluesky公式だとこうなってしまうらしい)
偶然過去に作って本体が行方不明だった rotation key を旧PDSに残っていたファイル(/pds/actors/2文字の数字かアルファベット/自分のDID/key というファイル)から復元してもらいここからなんとか verificatonMethodsを書き換えることに。
まずplc operationのためのトークンを取得しなければいけないのですがこれがgoat account plc request-tokenコマンドはjwt signatureなんとかなエラーになってしまいます。
そんなわけでgoat account service-auth-offlineで上記の鍵を使いBearerトークンを生成しそこからplc operationのためのトークンを取得します。ここではBearerトークンとしてtokenに出力しそのトークンを使ってplc operationのコードを要求します。
goat account service-auth-offline\
--atproto-signing-key {MULTIKEY}\
--iss {自分のDID}\
--lxm com.atproto.identity.requestPlcOperationSignature\
--aud did:web:bsky.social > token
curl -X POST https://bsky.social/xrpc/com.atproto.identity.requestPlcOperationSignature \
-H "Authorization: Bearer $(cat token)"この後登録されていたメールアドレスにSign in to Blueskyという件名のメールが届きXXXXX-XXXXX という形式のコードを得られました。
署名されたDID documentを作るために accessJwt が必要なのでcurlでログインしその出力から得ます。
curl -X POST https://bsky.social/xrpc/com.atproto.server.createSession \
-H "Content-Type: application/json" \
-d '{
"identifier": "ハンドル名",
"password": "パスワード"
}' > jwt.json
出力されたjwt.jsonファイルからaccessJwt の項目を見つけそれを access として保存しました。
この accessと先ほどのメールのコードを使い署名されたDID Documentを作成します。
各項目は goat account login -u ubanis.com -p パスワード --pds-host Blueskyでの所属PDSのURL してから goat account plc recommended で表示された内容に合わせます。
おかしくなっていた verificatonMethods ではないことを確認し、curlコマンドからの出力を ope.json として保存しました。
curl -X POST https://bsky.social/xrpc/com.atproto.identity.signPlcOperation \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $(cat access)" \
-d '{
"token": "メールに届いたコード",
"alsoKnownAs": [
"at://ハンドル名"
],
"rotationKeys": [
"did:key:zQ3shhCGUqDKjStzuDxPkTxN6ujddP4RkEKJJouJGRRkaLGbg",
"did:key:zQ3shpKnbdPx3g3CmPf5cRVTPe1HtSwVn5ish3wSnDPQCbLJK"
],
"verificationMethods": {
"atproto": "did:key:zQ3shekatj4YwJqyUpWKqmjrYvCsxCMCfS56yXHXhPxKeFTgj"
},
"services": {
"atproto_pds": {
"type": "AtprotoPersonalDataServer",
"endpoint": "https://shimeji.us-east.host.bsky.network"
}
}
}' > ope.json
最後に accessトークンを使いPLC Directoryに書き込みます。
curl -X POST https://bsky.social/xrpc/com.atproto.identity.submitPlcOperation \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $(cat access)" \
-d @ope.json特になんの応答もないので正しく書き込まれたのか確認します。
curl https://plc.directory/自分のDID | jq .出力です。
{
"@context": [
"https://www.w3.org/ns/did/v1",
"https://w3id.org/security/multikey/v1",
"https://w3id.org/security/suites/secp256k1-2019/v1"
],
"id": "did:plc:lmftezsq52hi53taz762s7pc",
"alsoKnownAs": [
"at://ubanis.com"
],
"verificationMethod": [
{
"id": "did:plc:lmftezsq52hi53taz762s7pc#atproto",
"type": "Multikey",
"controller": "did:plc:lmftezsq52hi53taz762s7pc",
"publicKeyMultibase": "zQ3shekatj4YwJqyUpWKqmjrYvCsxCMCfS56yXHXhPxKeFTgj"
}
],
"service": [
{
"id": "#atproto_pds",
"type": "AtprotoPersonalDataServer",
"serviceEndpoint": "https://shimeji.us-east.host.bsky.network"
}
]
}こうして復旧が完了しました。
このお二人の親身なご協力のおかげです。本当にありがとうございました。BaileyさんはPDSを簡単に移動できるPDS Mooverの作者の方です。多分これで普通に公式PDSに戻っていればこのような事故はなかったでしょう。

futanari artist R18 ふたなり絵を描きます Web https://ubanis.com Links https://woosh.link/ubanis.com 絵 art https://bsky.app/profile/did:plc:lmftezsq52hi53taz762s7pc/feed/aaalx2yzi3h5u
No comments yet