🌅

DID Resolver (uport) をCloudRunでホスティングする

2022/06/21に公開

DIDのresolverで有名な Universal Resolver がありますが、 Markusさん が実験的(Experimental)な位置づけで提供してくれているサービスであり、Decentlizedの思想からも本番稼働でUniversal Resolverを信頼するな(Don't rely on the public instance)と注意書きが書かれています。

ここ数日、DID関連の調査をしていてこのResolverで504に遭遇することがよくあり、可用性の高いResolverが欲しいなと思っていたのと、本番運用時は自前でResolverをホスティングする必要があると思っていたので、本記事では、 did:web と Ethereum関連(did:ethr 等)のresolveができるuport-did-driverをCloudRunで動かしてみました。

Docker Imageが公開されているので、以下のDockerfile 1行 書いただけです。

FROM uport/uni-resolver-driver-did-uport

CloudRunデプロイコマンド

gcloud run deploy uport-did-resolver \
  --source . \
  --allow-unauthenticated \
  --ingress all \
  --region asia-northeast1 \
  --max-instances 2 \
  --min-instances 0 \
  --cpu 1 \
  --memory 512Mi \
  --port 8081

ソースコード:
https://github.com/koshilife/cloudrun-uport-did-resolver

利用例

こんな感じで利用できます。
デプロイしたCloudRunのURLにvitalik氏のEthreumアドレスをresolveする例
※ 既にこちらの環境は消しています。

$ curl -s https://uport-did-resolver-cxv3zh25mq-an.a.run.app/1.0/identifiers/did:ethr:0xd8da6bf26964af9d7eed9e03e53415d37aa96045 | jq
{
  "didDocumentMetadata": {},
  "didResolutionMetadata": {
    "contentType": "application/did+ld+json"
  },
  "didDocument": {
    "@context": [
      "https://www.w3.org/ns/did/v1",
      "https://w3id.org/security/suites/secp256k1recovery-2020/v2"
    ],
    "id": "did:ethr:0xd8da6bf26964af9d7eed9e03e53415d37aa96045",
    "verificationMethod": [
      {
        "id": "did:ethr:0xd8da6bf26964af9d7eed9e03e53415d37aa96045#controller",
        "type": "EcdsaSecp256k1RecoveryMethod2020",
        "controller": "did:ethr:0xd8da6bf26964af9d7eed9e03e53415d37aa96045",
        "blockchainAccountId": "eip155:1:0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045"
      }
    ],
    "authentication": [
      "did:ethr:0xd8da6bf26964af9d7eed9e03e53415d37aa96045#controller"
    ],
    "assertionMethod": [
      "did:ethr:0xd8da6bf26964af9d7eed9e03e53415d37aa96045#controller"
    ]
  }
}

CORS許可パターン

CORSを許可したパターンも必要になったので、既存レポジトリをフォークして以下のように
ソースを変更をして動作を確認しました。

https://github.com/uport-project/uport-did-driver/compare/master...koshilife:allow-any-origins

参考:

https://idmlab.eidentity.jp/2020/07/did.html
https://qiita.com/chenglin/items/5e563e50d1c32dadf4c3
https://coliss.com/articles/build-websites/operation/work/cs-visualized-cors.html

Discussion