> ## Documentation Index
> Fetch the complete documentation index at: https://kawax.biz/llms.txt
> Use this file to discover all available pages before exploring further.

# Identity

> Bluesky 中 Handle 與 DID 的互解方式。彙整使用 Bluesky::identity() 的操作。

## 概觀

在 Bluesky 中經常需要相互解析 Handle 與 DID 等身分識別。

* [https://docs.bsky.app/docs/advanced-guides/resolving-identities](https://docs.bsky.app/docs/advanced-guides/resolving-identities)
* [https://atproto.com/guides/identity](https://atproto.com/guides/identity)

## 從 Handle 解析 DID

### 透過 API

```php theme={null}
use Revolution\Bluesky\Facades\Bluesky;

$did = Bluesky::resolveHandle('***.bsky.social')->json('did');
```

### 透過 DNS/well-known

檢查 DNS TXT 紀錄或 `/.well-known/atproto-did`。

```php theme={null}
use Revolution\Bluesky\Facades\Bluesky;

$did = Bluesky::identity()->resolveHandle('alice.test');
```

兩者相似但行為不同。透過 API 會經由網路向 Bluesky 服務查詢，而透過 DNS/well-known 則適用於自訂網域的 Handle 解析。

## 從 DID 取得 DID Document

`resolveDID` 會回傳 DID Document。

[https://plc.directory/did:plc:ewvi7nxzyoun6zhxrhs64oiz](https://plc.directory/did:plc:ewvi7nxzyoun6zhxrhs64oiz)

```php theme={null}
use Revolution\Bluesky\Facades\Bluesky;

$didDoc = Bluesky::identity()->resolveDID('did:plc:*** 或 did:web:***')->json();
```

## 從 DID Document 取得 Handle

DID Document 的 `alsoKnownAs` 欄位包含 Handle。

```php theme={null}
use Revolution\Bluesky\Facades\Bluesky;
use Revolution\Bluesky\Support\DidDocument;

$didDoc = DidDocument::make(Bluesky::identity()->resolveDID('did:plc:*** 或 did:web:***')->json());
$handle = $didDoc->handle();
```

## 以 resolveIdentity 統合解析

使用結合 `resolveHandle` 與 `resolveDID` 的 `resolveIdentity`，可從 DID 或 Handle 兩者任一開始解析並回傳 DID Document。

```php theme={null}
use Revolution\Bluesky\Facades\Bluesky;
use Revolution\Bluesky\Support\DidDocument;

$didDoc = DidDocument::make(Bluesky::identity()->resolveIdentity('did 或 handle')->json());
$didDoc->id();
$didDoc->handle();
```

## 取得公開個人資料

公開個人資料可從 DID 或 Handle 任一解析，回應中同時包含 DID 與 Handle。

```php theme={null}
use Revolution\Bluesky\Facades\Bluesky;

$profile = Bluesky::getProfile('did 或 handle');
$profile->json('did');
$profile->json('handle');
```

## 取得 PDS URL / serviceEndpoint

DID Document 的 `serviceEndpoint` 是 PDS 的 URL。雖然直接使用的機會不多，但需要時可取得。

```
https://***.***.host.bsky.network
```

```php theme={null}
use Revolution\Bluesky\Facades\Bluesky;
use Revolution\Bluesky\Support\DidDocument;

$didDoc = DidDocument::make(Bluesky::identity()->resolveIdentity('did 或 handle')->json());
$didDoc->pdsUrl();
```

## 取得 Authorization Server URL

透過 PDS 解析 Authorization Server 的 URL。

若是註冊於 Bluesky 的帳號，通常會是 `https://bsky.social`。

```php theme={null}
use Revolution\Bluesky\Facades\Bluesky;
use Revolution\Bluesky\Support\DidDocument;

$didDoc = DidDocument::make(Bluesky::identity()->resolveIdentity('did 或 handle')->json());

$pds = Bluesky::pds()->getProtectedResource($didDoc->pdsUrl());
$pds->authServer();
```

<Info>
  Source：[docs/identity.md](https://github.com/invokable/laravel-bluesky/blob/main/docs/identity.md)
</Info>


## Related topics

- [BlueskyManager 與 HasShortHand](/zh-TW/packages/laravel-bluesky/bluesky-manager.md)
- [WebSocket (Jetstream / Firehose)](/zh-TW/packages/laravel-bluesky/websocket.md)
- [Crypto — AT Protocol 加密](/zh-TW/packages/laravel-bluesky/crypto.md)
