> ## 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](/ko/packages/laravel-bluesky/bluesky-manager.md)
- [WebSocket (Jetstream / Firehose)](/ko/packages/laravel-bluesky/websocket.md)
- [Crypto — AT Protocol 암호화](/ko/packages/laravel-bluesky/crypto.md)
