---
title: "OAuth ਨਾਲ ਕਨੈਕਟ ਕਰੋ"
description: "API key ਸਾਂਝੀ ਕੀਤੇ ਬਿਨਾਂ MCP ਕਲਾਇੰਟਾਂ ਅਤੇ ThunderPhone CLI ਨੂੰ ਅਧਿਕਾਰਿਤ ਕਰੋ।"
---

OAuth ਕਿਸੇ ਐਪ ਨੂੰ ਤੁਹਾਡੇ ਦੁਆਰਾ ਮਨਜ਼ੂਰ ਕੀਤੀਆਂ ਅਨੁਮਤੀਆਂ ਨਾਲ ਇੱਕ ThunderPhone ਸੰਗਠਨ ਨਾਲ ਕਨੈਕਟ ਕਰਨ ਦਿੰਦਾ ਹੈ। ਡਾਇਰੈਕਟਰੀ ਕਲਾਇੰਟਾਂ ਨੂੰ ਮੂਲ ਰੂਪ ਵਿੱਚ OAuth ਵਰਤਣਾ ਚਾਹੀਦਾ ਹੈ। ਜਿਨ੍ਹਾਂ ਕਲਾਇੰਟਾਂ ਨੂੰ ਹੱਥੋਂ ਕਨਫਿਗਰ ਕੀਤਾ ਗਿਆ Bearer ਟੋਕਨ ਚਾਹੀਦਾ ਹੈ, ਉਨ੍ਹਾਂ ਲਈ ਸੰਗਠਨ API ਕੁੰਜੀਆਂ ਉਪਲਬਧ ਰਹਿੰਦੀਆਂ ਹਨ।

## ਕਨੈਕਸ਼ਨ ਮਨਜ਼ੂਰ ਕਰੋ

ਆਪਣੇ MCP ਕਲਾਇੰਟ ਵਿੱਚ ਕਨੈਕਸ਼ਨ ਸ਼ੁਰੂ ਕਰੋ। ThunderPhone ਵਿੱਚ ਸਾਈਨ ਇਨ ਕਰੋ, ਐਪ ਦਾ ਨਾਮ ਅਤੇ ਮੰਗੀਆਂ ਗਈਆਂ ਅਨੁਮਤੀਆਂ ਦੀ ਜਾਂਚ ਕਰੋ, ਇੱਕ ਸੰਗਠਨ ਚੁਣੋ ਅਤੇ **ਮਨਜ਼ੂਰ ਕਰੋ** ਚੁਣੋ। ਜੇ ਤੁਸੀਂ ਕਨੈਕਸ਼ਨ ਸ਼ੁਰੂ ਨਹੀਂ ਕੀਤਾ ਜਾਂ ਐਪ 'ਤੇ ਭਰੋਸਾ ਨਹੀਂ ਕਰਦੇ, ਤਾਂ **ਅਸਵੀਕਾਰ ਕਰੋ** ਚੁਣੋ। ਐਪ ਦੇ ਨਾਮ ਉਨ੍ਹਾਂ ਦੇ ਡਿਵੈਲਪਰਾਂ ਵੱਲੋਂ ਦਿੱਤੇ ਜਾਂਦੇ ਹਨ ਅਤੇ ਇਹ ਤਸਦੀਕ ਦਾ ਬੈਜ ਨਹੀਂ ਹਨ।

ਪੜ੍ਹਨ ਦੀਆਂ ਅਨੁਮਤੀਆਂ ਨਾਮਿਤ ਡਾਟਾ ਦਿਖਾਉਂਦੀਆਂ ਹਨ, ਜਿਸ ਵਿੱਚ ਰਿਕਾਰਡਿੰਗਾਂ ਅਤੇ ਟ੍ਰਾਂਸਕ੍ਰਿਪਟ ਵੀ ਸ਼ਾਮਲ ਹਨ ਜਦੋਂ `calls:read` ਦੀ ਬੇਨਤੀ ਕੀਤੀ ਜਾਂਦੀ ਹੈ। ਲਿਖਣ ਦੀਆਂ ਅਨੁਮਤੀਆਂ ਸਰੋਤਾਂ ਨੂੰ ਬਦਲ ਜਾਂ ਮਿਟਾ ਸਕਦੀਆਂ ਹਨ; ਕਾਲਾਂ, ਕੈਂਪੇਨਾਂ, ਫ਼ੋਨ ਖਰੀਦਾਂ ਅਤੇ ਡਿਪਲੌਇਮੈਂਟਾਂ ਨਾਲ ਲਾਗਤ ਆ ਸਕਦੀ ਹੈ ਜਾਂ ਪ੍ਰੋਡਕਸ਼ਨ ਪ੍ਰਭਾਵਿਤ ਹੋ ਸਕਦਾ ਹੈ। ਤੁਹਾਡੀ ਸੰਗਠਨ ਭੂਮਿਕਾ ਫਿਰ ਵੀ ਲਾਗੂ ਰਹਿੰਦੀ ਹੈ।

CLI ਕਨੈਕਸ਼ਨ ਲਈ, ਆਪਣੇ ਟਰਮੀਨਲ ਵਿੱਚ ਦਿਖਾਇਆ ਗਿਆ ਤਸਦੀਕ ਲਿੰਕ ਖੋਲ੍ਹੋ, ਅੱਠ-ਅੱਖਰਾਂ ਵਾਲੇ ਕੋਡ ਦੀ ਤੁਲਨਾ ਕਰੋ, ਆਪਣਾ ਸੰਗਠਨ ਚੁਣੋ ਅਤੇ ਮਨਜ਼ੂਰ ਕਰੋ। ਸਿਰਫ਼ ਲਿੰਕ ਖੋਲ੍ਹਣ ਨਾਲ ਪਹੁੰਚ ਨਹੀਂ ਮਿਲਦੀ। ਕੋਡ 15 ਮਿੰਟਾਂ ਬਾਅਦ ਮਿਆਦ ਪੁੱਗ ਜਾਂਦੇ ਹਨ।

## ਐਪ ਦਾ ਕਨੈਕਸ਼ਨ ਤੋੜੋ

ਡੈਸ਼ਬੋਰਡ ਵਿੱਚ **ਸੰਗਠਨ → API ਕੁੰਜੀਆਂ → ਅਧਿਕਾਰਤ ਐਪਾਂ** ਖੋਲ੍ਹੋ ਅਤੇ **ਰੱਦ ਕਰੋ** ਚੁਣੋ। ਇਸ ਨਾਲ ਮੌਜੂਦਾ ਸੰਗਠਨ ਲਈ ਤੁਹਾਡੀ ਚੁਣੀ ਹੋਈ ਅਧਿਕਾਰਤਾ ਰੱਦ ਹੋ ਜਾਂਦੀ ਹੈ, ਜਿਸ ਵਿੱਚ ਇਸਦੇ ਐਕਸੈਸ ਅਤੇ ਰਿਫ੍ਰੈਸ਼ ਟੋਕਨ ਵੀ ਸ਼ਾਮਲ ਹਨ। ਜੇ ਤੁਸੀਂ ਇਸਨੂੰ ਦੁਬਾਰਾ ਅਧਿਕਾਰਿਤ ਕਰਨਾ ਚਾਹੁੰਦੇ ਹੋ, ਤਾਂ ਐਪ ਤੋਂ ਮੁੜ ਕਨੈਕਟ ਕਰੋ।

## MCP ਕਲਾਇੰਟਾਂ ਲਈ ਖੋਜ

ਸਰਵਰ URL `https://api.thunderphone.com/v1/mcp` ਵਰਤੋ। ਵੈਧ ਪ੍ਰਮਾਣੀਕਰਨ ਤੋਂ ਬਿਨਾਂ ਬੇਨਤੀ ਨੂੰ `401` ਮਿਲਦਾ ਹੈ, ਜਿਸ ਨਾਲ ਇਹ ਹੁੰਦਾ ਹੈ:

```http
WWW-Authenticate: Bearer resource_metadata="https://api.thunderphone.com/.well-known/oauth-protected-resource"
```

ਉਹ ਦਸਤਾਵੇਜ਼ ਪ੍ਰਾਪਤ ਕਰੋ, ਫਿਰ `https://api.thunderphone.com/.well-known/oauth-authorization-server` ਤੋਂ ਪ੍ਰਮਾਣੀਕਰਨ ਸਰਵਰ ਦਾ ਮੈਟਾਡੇਟਾ ਪ੍ਰਾਪਤ ਕਰੋ। ਸਰੋਤ ਮੈਟਾਡੇਟਾ `/.well-known/oauth-protected-resource/v1/mcp` 'ਤੇ ਵੀ ਉਪਲਬਧ ਹੈ। ਐਂਡਪੁਆਇੰਟ ਬਣਾਉਣ ਦੀ ਬਜਾਏ ਵਾਪਸ ਮਿਲੇ ਐਂਡਪੁਆਇੰਟ ਵਰਤੋ। ਸਰੋਤ ਪਛਾਣਕਰਤਾ `https://api.thunderphone.com/v1/mcp` ਹੈ।

ਸਰਵਰ **S256 PKCE** ਨਾਲ ਪ੍ਰਮਾਣੀਕਰਨ ਕੋਡ, ਰੋਟੇਟ ਹੋਣ ਵਾਲੇ ਰਿਫ੍ਰੈਸ਼ ਟੋਕਨ, ਜਨਤਕ ਡਾਇਨਾਮਿਕ ਕਲਾਇੰਟ ਰਜਿਸਟ੍ਰੇਸ਼ਨ, ਰੱਦਕਰਨ ਅਤੇ ਡਿਵਾਈਸ ਪ੍ਰਮਾਣੀਕਰਨ ਗ੍ਰਾਂਟ ਦਾ ਸਮਰਥਨ ਕਰਦਾ ਹੈ। ਕੋਈ ਕਲਾਇੰਟ ਸੀਕਰਟ ਜਾਂ ਇੰਪਲਿਸਿਟ ਗ੍ਰਾਂਟ ਨਹੀਂ ਹਨ। OpenID ਖੋਜ `/.well-known/openid-configuration` 'ਤੇ ਵੀ ਉਪਲਬਧ ਹੈ; ਇਸ ਵਿੱਚ ਉਹੀ ਪ੍ਰਮਾਣੀਕਰਨ-ਸਰਵਰ ਫੀਲਡਾਂ, ਨਾਲ ਹੀ `subject_types_supported: ["public"]` ਅਤੇ userinfo ਐਂਡਪੁਆਇੰਟ ਸ਼ਾਮਲ ਹਨ। ID ਟੋਕਨ ਅਤੇ ਕਲਾਇੰਟ ID ਮੈਟਾਡੇਟਾ ਦਸਤਾਵੇਜ਼ਾਂ (CIMD) ਦਾ ਸਮਰਥਨ ਨਹੀਂ ਹੈ।

### ਜਨਤਕ ਕਲਾਇੰਟ ਰਜਿਸਟਰ ਕਰੋ

`POST /v1/oauth/register` ਨੂੰ JSON ਭੇਜੋ:

```json
{
  "client_name": "My MCP client",
  "redirect_uris": ["http://127.0.0.1:8765/callback"],
  "token_endpoint_auth_method": "none",
  "grant_types": ["authorization_code", "refresh_token"],
  "response_types": ["code"]
}
```

ਵਾਪਸ ਮਿਲਿਆ `client_id` ਸੰਭਾਲੋ। ਰੀਡਾਇਰੈਕਟਾਂ ਲਈ HTTPS ਜਾਂ `127.0.0.1` ਜਾਂ `localhost` ਉੱਤੇ HTTP ਵਰਤਣਾ ਲਾਜ਼ਮੀ ਹੈ। ਪੋਰਟ ਅਤੇ ਪਾਥ ਸਮੇਤ ਸਹੀ ਕਾਲਬੈਕ URI ਰਜਿਸਟਰ ਕਰੋ। ਫ੍ਰੈਗਮੈਂਟ ਅਤੇ ਏਮਬੈਡ ਕੀਤੇ ਕ੍ਰੈਡੈਂਸ਼ਲ ਅਸਵੀਕਾਰ ਕੀਤੇ ਜਾਂਦੇ ਹਨ। ਵਿਕਲਪਿਕ `client_uri` ਅਤੇ `logo_uri` ਲਈ HTTPS ਲਾਜ਼ਮੀ ਹੈ; ThunderPhone ਰਜਿਸਟ੍ਰੇਸ਼ਨ ਦੌਰਾਨ ਇਹਨਾਂ ਨੂੰ ਪ੍ਰਾਪਤ ਨਹੀਂ ਕਰਦਾ। ਰਜਿਸਟ੍ਰੇਸ਼ਨ ਰੇਟ-ਲਿਮਿਟਡ ਹੈ। ਰਜਿਸਟਰ ਕੀਤੇ ਕਲਾਇੰਟਾਂ ਦੀ ਮਿਆਦ ਖਤਮ ਨਹੀਂ ਹੁੰਦੀ ਅਤੇ ਕਨੈਕਸ਼ਨ ਰੱਦ ਹੋਣ 'ਤੇ ਵੀ ਰਜਿਸਟਰ ਰਹਿੰਦੇ ਹਨ। HTTPS ਕਾਲਬੈਕਾਂ ਵਿੱਚ `https://chatgpt.com/connector/oauth/<id>` ਅਤੇ `https://chatgpt.com/connector_platform_oauth_redirect` ਸ਼ਾਮਲ ਹਨ। ਹਰੇਕ ਕਨੈਕਸ਼ਨ ਆਪਣਾ ਕਲਾਇੰਟ ਰਜਿਸਟਰ ਕਰ ਸਕਦਾ ਹੈ।

### ਪ੍ਰਮਾਣੀਕਰਨ ਕੋਡ

ਖੋਜਿਆ ਗਿਆ ਪ੍ਰਮਾਣੀਕਰਨ ਐਂਡਪੁਆਇੰਟ `client_id`, ਸਹੀ ਰਜਿਸਟਰ ਕੀਤੇ `redirect_uri`, `response_type=code`, ਰੈਂਡਮ `state`, `scope`, `code_challenge`, `code_challenge_method=S256`, ਅਤੇ `resource=https://api.thunderphone.com/v1/mcp` ਨਾਲ ਖੋਲ੍ਹੋ। ਨਵੇਂ ਉੱਚ-ਐਂਟ੍ਰੋਪੀ PKCE ਵੇਰੀਫਾਇਰ ਦੇ ਬਿਨਾਂ ਪੈਡਿੰਗ ਵਾਲੇ base64url SHA-256 ਡਾਈਜੈਸਟ ਵਜੋਂ ਚੈਲੇਂਜ ਗਣਨਾ ਕਰੋ। ਕੋਡ ਐਕਸਚੇਂਜ ਕਰਨ ਤੋਂ ਪਹਿਲਾਂ ਵਾਪਸ ਮਿਲੇ `state` ਅਤੇ `iss` ਦੀ ਜਾਂਚ ਕਰੋ। ਇਨਕਾਰ ਅਤੇ ਪ੍ਰੋਟੋਕੋਲ ਗਲਤੀਆਂ ਸਮੇਤ ਹਰੇਕ ਪ੍ਰਮਾਣੀਕਰਨ ਜਵਾਬ, ਖੋਜੇ ਗਏ `issuer` ਨਾਲ ਬਿਲਕੁਲ ਮੇਲ ਖਾਂਦੇ `iss` ਰਾਹੀਂ ਜਾਰੀਕਰਤਾ ਦੀ ਪਛਾਣ ਕਰਦਾ ਹੈ। ਅਵੈਧ ਕਲਾਇੰਟ ਜਾਂ ਕਾਲਬੈਕ ਦੀਆਂ ਗਲਤੀਆਂ ਉਸ ਕਾਲਬੈਕ 'ਤੇ ਰੀਡਾਇਰੈਕਟ ਕੀਤੇ ਬਿਨਾਂ ਲੋਕਲ ਤੌਰ 'ਤੇ ਵਾਪਸ ਕੀਤੀਆਂ ਜਾਂਦੀਆਂ ਹਨ।

ਫਾਰਮ ਏਨਕੋਡਿੰਗ ਵਰਤ ਕੇ `POST /v1/oauth/token` 'ਤੇ ਐਕਸਚੇਂਜ ਕਰੋ (JSON ਵੀ ਸਵੀਕਾਰ ਹੈ):

```text
grant_type=authorization_code
client_id=<your client id>
code=<single-use authorization code>
redirect_uri=<exact registered redirect URI>
code_verifier=<original PKCE verifier>
resource=https://api.thunderphone.com/v1/mcp
```

ਵਿਕਲਪਿਕ `resource` ਪੈਰਾਮੀਟਰ ਪ੍ਰਮਾਣੀਕਰਨ ਅਤੇ ਟੋਕਨ ਦੋਵੇਂ ਬੇਨਤੀਆਂ ਉੱਤੇ ਸਵੀਕਾਰ ਹੁੰਦਾ ਹੈ, ਜਿਸ ਵਿੱਚ ਰਿਫ੍ਰੈਸ਼ ਅਤੇ ਡਿਵਾਈਸ ਐਕਸਚੇਂਜ ਵੀ ਸ਼ਾਮਲ ਹਨ। ਛੱਡੇ ਜਾਣ 'ਤੇ, ਇਹ ਖੋਜੇ ਗਏ MCP ਸਰੋਤ ਲਈ ਡਿਫੌਲਟ ਹੁੰਦਾ ਹੈ। ਮੌਜੂਦ ਹੋਣ 'ਤੇ, ਇਸ ਦਾ ਉਸ ਸਰੋਤ ਨਾਲ ਬਿਲਕੁਲ ਮੇਲ ਖਾਣਾ ਲਾਜ਼ਮੀ ਹੈ; ਹੋਰ ਮੁੱਲ `invalid_target` ਵਾਪਸ ਕਰਦੇ ਹਨ। ਐਕਸੈੱਸ ਟੋਕਨ ਉਸ ਆਡੀਅੰਸ ਨੂੰ ਰੱਖਦੇ ਹਨ, ਅਤੇ MCP ਗੁੰਮ ਜਾਂ ਵੱਖਰੀ ਆਡੀਅੰਸ ਵਾਲੇ ਟੋਕਨਾਂ ਨੂੰ `401` ਅਤੇ ਖੋਜ ਚੈਲੇਂਜ ਨਾਲ ਅਸਵੀਕਾਰ ਕਰਦਾ ਹੈ।

ਪ੍ਰਮਾਣੀਕਰਨ ਬੇਨਤੀਆਂ ਅਤੇ ਕੋਡ 10 ਮਿੰਟ ਬਾਅਦ ਮਿਆਦ ਪੁੱਗ ਜਾਂਦੇ ਹਨ। ਹਰੇਕ ਟੋਕਨ ਜਵਾਬ ਵਿੱਚ `access_token`, `token_type` (`Bearer`), `expires_in` (ਡਿਫੌਲਟ ਰੂਪ ਵਿੱਚ 3600 ਸਕਿੰਟ), `refresh_token`, `scope`, `organization_id`, ਅਤੇ `organization_name` ਹੁੰਦੇ ਹਨ। ਐਕਸੈੱਸ ਟੋਕਨ ਸਿਰਫ਼ `Authorization: Bearer` ਹੈਡਰ ਰਾਹੀਂ ਭੇਜੋ। ਟੋਕਨ ਕਦੇ ਵੀ URLs, ਲੌਗਾਂ, ਸੋਰਸ ਕੰਟਰੋਲ ਜਾਂ ਚੈਟ ਵਿੱਚ ਨਾ ਰੱਖੋ।

### ਰਿਫ੍ਰੈਸ਼ ਅਤੇ ਰੱਦ ਕਰੋ

ਟੋਕਨ ਐਂਡਪੁਆਇੰਟ ਉੱਤੇ `grant_type=refresh_token`, `client_id`, `refresh_token`, ਅਤੇ `resource` ਨਾਲ ਰਿਫ੍ਰੈਸ਼ ਕਰੋ। ਨਵਾਂ ਰਿਫ੍ਰੈਸ਼ ਟੋਕਨ ਐਟਾਮਿਕ ਤੌਰ 'ਤੇ ਸੰਭਾਲੋ ਅਤੇ ਪੁਰਾਣਾ ਵਰਤਣਾ ਬੰਦ ਕਰੋ। ਸਫਲ ਰਿਫ੍ਰੈਸ਼ ਤੋਂ ਬਿਨਾਂ ਰਿਫ੍ਰੈਸ਼ ਟੋਕਨਾਂ ਦੀ ਮਿਆਦ 30 ਦਿਨਾਂ ਬਾਅਦ ਖਤਮ ਹੋ ਜਾਂਦੀ ਹੈ। ਵਿਕਲਪਿਕ `scope` ਦਿੱਤੀਆਂ ਗਈਆਂ ਅਨੁਮਤੀਆਂ ਨੂੰ ਸੀਮਿਤ ਕਰ ਸਕਦਾ ਹੈ। `offline_access` ਹਮੇਸ਼ਾ ਸ਼ਾਮਲ ਹੁੰਦਾ ਹੈ ਅਤੇ ਰਿਫ੍ਰੈਸ਼ ਟੋਕਨ ਹਮੇਸ਼ਾ ਜਾਰੀ ਕੀਤੇ ਜਾਂਦੇ ਹਨ। `scope` ਤੋਂ ਬਿਨਾਂ ਸ਼ੁਰੂਆਤੀ ਬੇਨਤੀ ਸਿਰਫ਼ `offline_access` ਦਿੰਦੀ ਹੈ, ਇਸ ਲਈ ਕਲਾਇੰਟਾਂ ਨੂੰ ਲੋੜੀਂਦੀਆਂ ਅਨੁਮਤੀਆਂ ਦੀ ਬੇਨਤੀ ਕਰਨੀ ਚਾਹੀਦੀ ਹੈ।

ਕੋਡ ਦੀ ਮੁੜ ਵਰਤੋਂ ਅਤੇ ਰੋਟੇਟ ਕੀਤੇ ਰਿਫ੍ਰੈਸ਼ ਟੋਕਨ ਦੀ ਮੁੜ ਵਰਤੋਂ ਪੂਰੇ ਪ੍ਰਮਾਣੀਕਰਨ ਨੂੰ ਰੱਦ ਕਰ ਦਿੰਦੀ ਹੈ। ਕਲਾਇੰਟ ਦੇ ਅੰਦਰ ਰਿਫ੍ਰੈਸ਼ਾਂ ਨੂੰ ਕ੍ਰਮਵਾਰ ਕਰੋ; ਸਫਲਤਾਪੂਰਵਕ ਐਕਸਚੇਂਜ ਕੀਤੇ ਕ੍ਰੈਡੈਂਸ਼ਲ ਨੂੰ ਦੁਬਾਰਾ ਚਲਾਉਣਾ ਸੁਰੱਖਿਅਤ ਰੀਟ੍ਰਾਈ ਰਣਨੀਤੀ ਨਹੀਂ ਹੈ।

ਡਿਸਕਨੈਕਟ ਕਰਨ ਲਈ, `POST /v1/oauth/revoke` ਨੂੰ `token` ਅਤੇ `client_id` ਭੇਜੋ। ਕਿਸੇ ਵੀ ਟੋਕਨ ਨੂੰ ਰੱਦ ਕਰਨ ਨਾਲ ਉਸ ਦਾ ਪ੍ਰਮਾਣੀਕਰਨ ਰੱਦ ਹੋ ਜਾਂਦਾ ਹੈ, ਜਿਸ ਵਿੱਚ ਉਸ ਤੋਂ ਜਾਰੀ ਸਾਰੇ ਟੋਕਨ ਸ਼ਾਮਲ ਹਨ। ਅਣਜਾਣ ਟੋਕਨ ਇਹ ਦੱਸੇ ਬਿਨਾਂ ਸਫਲਤਾ ਵਾਪਸ ਕਰਦਾ ਹੈ ਕਿ ਉਹ ਮੌਜੂਦ ਹੈ ਜਾਂ ਨਹੀਂ। ਡੈਸ਼ਬੋਰਡ ਸੈਸ਼ਨ `GET /v1/oauth/grants` 'ਤੇ ਆਪਣੇ ਪ੍ਰਮਾਣੀਕਰਨਾਂ ਦੀ ਸੂਚੀ ਦੇਖ ਸਕਦੇ ਹਨ ਅਤੇ `X-ThunderPhone-Org` ਰਾਹੀਂ ਸੰਗਠਨ ਚੁਣਦੇ ਹੋਏ `DELETE /v1/oauth/grants/<id>` 'ਤੇ ਇੱਕ ਨੂੰ ਰੱਦ ਕਰ ਸਕਦੇ ਹਨ।

### ਡਿਵਾਈਸ ਪ੍ਰਮਾਣੀਕਰਨ

ਡਿਵਾਈਸ ਪ੍ਰਮਾਣੀਕਰਨ ਸਿਰਫ਼ ਪਹਿਲਾਂ ਤੋਂ ਰਜਿਸਟਰ ਕੀਤੇ ਕਲਾਇੰਟਾਂ ਲਈ ਸੀਮਿਤ ਹੈ; ਡਾਇਨਾਮਿਕ ਤੌਰ 'ਤੇ ਰਜਿਸਟਰ ਕੀਤੇ ਕਲਾਇੰਟਾਂ ਨੂੰ `unauthorized_client` ਮਿਲਦਾ ਹੈ। ਪਹਿਲਾਂ ਤੋਂ ਰਜਿਸਟਰ ਕੀਤਾ ਜਨਤਕ ਕਲਾਇੰਟ `thunderphone-cli` ਡਿਵਾਈਸ ਪ੍ਰਮਾਣੀਕਰਨ ਅਤੇ ਰਿਫ੍ਰੈਸ਼ ਦਾ ਸਮਰਥਨ ਕਰਦਾ ਹੈ। `POST /v1/oauth/device/code` ਨੂੰ `client_id=thunderphone-cli` ਅਤੇ `scope` ਭੇਜੋ। ਵਰਤੋਂਕਾਰ ਨੂੰ `user_code` ਅਤੇ `verification_uri` ਦਿਖਾਓ, ਜਾਂ `verification_uri_complete` ਖੋਲ੍ਹੋ।

`grant_type=urn:ietf:params:oauth:grant-type:device_code`, `client_id`, ਅਤੇ `device_code` ਨਾਲ ਟੋਕਨ ਐਂਡਪੁਆਇੰਟ ਨੂੰ ਪੋਲ ਕਰੋ, ਵਾਪਸ ਮਿਲੇ `interval` (5 ਸਕਿੰਟ) ਜਿੰਨਾ ਘੱਟੋ-ਘੱਟ ਇੰਤਜ਼ਾਰ ਕਰੋ। `authorization_pending` ਉੱਤੇ ਜਾਰੀ ਰੱਖੋ। `slow_down` ਉੱਤੇ, ਹਰੇਕ ਅਗਲੀ ਬੇਨਤੀ ਲਈ ਜਵਾਬ ਵਿੱਚ ਵਾਪਸ ਮਿਲਿਆ ਨਵਾਂ `interval` ਵਰਤੋ (5 ਸਕਿੰਟ ਵਧਾਇਆ ਗਿਆ)। `access_denied`, `expired_token`, ਜਾਂ ਕਿਸੇ ਹੋਰ ਗਲਤੀ ਉੱਤੇ ਰੁਕ ਜਾਓ। ਡਿਵਾਈਸ ਕੋਡ ਨੂੰ ਕਦੇ ਵੀ ਆਪਣੇ ਆਪ ਮਨਜ਼ੂਰ ਨਾ ਕਰੋ।

ਪਹਿਲਾਂ ਤੋਂ ਰਜਿਸਟਰ ਕੀਤਾ `thunderphone-mcp` ਕਲਾਇੰਟ ਕਿਸੇ ਵੀ ਪੋਰਟ ਉੱਤੇ `http://127.0.0.1/callback` ਅਤੇ `http://localhost/callback` ਸਵੀਕਾਰ ਕਰਦਾ ਹੈ। ਸਕੀਮ, ਹੋਸਟ, ਪਾਥ ਅਤੇ ਕਵੇਰੀ ਦਾ ਮੇਲ ਖਾਣਾ ਲਾਜ਼ਮੀ ਹੈ; ਟੋਕਨ ਐਕਸਚੇਂਜ ਨੂੰ ਪ੍ਰਮਾਣੀਕਰਨ ਤੋਂ ਮਿਲਿਆ ਸਹੀ ਰੀਡਾਇਰੈਕਟ URI, ਪੋਰਟ ਸਮੇਤ, ਵਰਤਣਾ ਲਾਜ਼ਮੀ ਹੈ। ਡਾਇਨਾਮਿਕ ਤੌਰ 'ਤੇ ਰਜਿਸਟਰ ਕੀਤੇ ਕਲਾਇੰਟਾਂ ਲਈ ਪੋਰਟ ਸਮੇਤ ਸਹੀ ਰੀਡਾਇਰੈਕਟ-URI ਮੇਲ ਲਾਜ਼ਮੀ ਹੈ। ਜੇ ਤੁਹਾਨੂੰ ਕਿਸੇ ਹੋਰ ਪਾਥ ਦੀ ਲੋੜ ਹੈ ਤਾਂ ਵੱਖਰਾ ਕਾਲਬੈਕ ਡਾਇਨਾਮਿਕ ਤੌਰ 'ਤੇ ਰਜਿਸਟਰ ਕਰੋ।

### ਖਾਤਾ ਪਛਾਣ ਅਤੇ ਵਰਕਸਪੇਸ ਡੋਮੇਨ ਜਾਂਚਾਂ

ਤੁਹਾਡੇ ਕਲਾਇੰਟ ਨੂੰ ਲੋੜੀਂਦੇ ਕਾਰਵਾਈ ਸਕੋਪਾਂ ਦੇ ਨਾਲ `openid email` ਦੋਵੇਂ ਦੀ ਬੇਨਤੀ ਕਰੋ। Bearer ਹੈਡਰ ਵਿੱਚ ਐਕਸੈੱਸ ਟੋਕਨ ਨਾਲ ਖੋਜੇ ਗਏ `userinfo_endpoint` (`GET /v1/oauth/userinfo`) ਨੂੰ ਕਾਲ ਕਰੋ। ਸਫਲ ਜਵਾਬ ਵਿੱਚ ਇਹ ਹੁੰਦਾ ਹੈ:

```json
{
  "sub": "123",
  "email": "person@example.com",
  "email_verified": true,
  "name": "Example User",
  "org_id": 456
}
```

`sub` ਸਥਿਰ ਵਰਤੋਂਕਾਰ ਪਛਾਣਕਰਤਾ ਹੈ; `org_id` ਸਹਿਮਤੀ ਦੌਰਾਨ ਚੁਣਿਆ ਗਿਆ ਸੰਗਠਨ ਹੈ। ਐਂਡਪੁਆਇੰਟ ਨੂੰ ਦੋਵੇਂ ਪਛਾਣ ਸਕੋਪ ਚਾਹੀਦੇ ਹਨ ਅਤੇ ਕਿਸੇ ਇੱਕ ਦੇ ਗੁੰਮ ਹੋਣ 'ਤੇ `403` ਵਾਪਸ ਕਰਦਾ ਹੈ। ਜੇ ਖਾਤੇ ਵਿੱਚ ਕੋਈ ਪ੍ਰਮਾਣਿਤ ਈਮੇਲ ਪ੍ਰੋਫਾਈਲ ਨਹੀਂ ਹੈ, ਤਾਂ ਇਹ ਅਪ੍ਰਮਾਣਿਤ ਈਮੇਲ ਨੂੰ ਭਰੋਸੇਯੋਗ ਦੱਸਣ ਦੀ ਬਜਾਏ `error=access_denied` ਨਾਲ `403` ਵਾਪਸ ਕਰਦਾ ਹੈ। ਅਵੈਧ, ਮਿਆਦ ਪੁੱਗੇ, ਰੱਦ ਕੀਤੇ, ਜਾਂ ਗਲਤ-ਆਡੀਅੰਸ ਵਾਲੇ ਟੋਕਨ `401` ਵਾਪਸ ਕਰਦੇ ਹਨ। ਮਨੁੱਖੀ ਸੈਸ਼ਨ ਟੋਕਨ ਅਤੇ ਸੰਗਠਨ API ਕੁੰਜੀਆਂ userinfo ਨੂੰ ਕਾਲ ਨਹੀਂ ਕਰ ਸਕਦੀਆਂ। ਕੋਈ ID ਟੋਕਨ ਜਾਰੀ ਨਹੀਂ ਕੀਤਾ ਜਾਂਦਾ।

## ਉਪਲਬਧ ਅਨੁਮਤੀਆਂ

| ਪਰਿਵਾਰ | ਸਕੋਪ |
| --- | --- |
| ਏਜੰਟ ਅਤੇ ਏਜੰਟ ਇੰਪੋਰਟ | `agents:read`, `agents:write` |
| ਕਾਲਾਂ | `calls:read`, `calls:write` |
| ਫ਼ੋਨ ਨੰਬਰ ਅਤੇ VoIP | `numbers:read`, `numbers:write` |
| ਗਿਆਨ | `knowledge:read`, `knowledge:write` |
| ਮੁਹਿੰਮਾਂ | `campaigns:read`, `campaigns:write` |
| ਇੰਟੀਗ੍ਰੇਸ਼ਨ, ਵੈੱਬਹੁੱਕ ਐਂਡਪੌਇੰਟ, MCP ਸਰਵਰ | `integrations:read`, `integrations:write` |
| ਆਵਾਜ਼ਾਂ | `voices:read` |
| ਟੈਸਟ ਸਿਨਾਰਿਓ, ਟੈਸਟ ਰਨ, ਪ੍ਰਮਾਣੀਕਰਨ | `testing:read`, `testing:write` |
| ਬਿਲਿੰਗ | `billing:read` |
| ਖਾਤਾ ਪਛਾਣ ਅਤੇ ਪ੍ਰਮਾਣਿਤ ਈਮੇਲ | `openid`, `email` (userinfo ਲਈ ਦੋਵੇਂ ਲਾਜ਼ਮੀ ਹਨ) |
| ਸਥਾਈ ਕਨੈਕਸ਼ਨ | `offline_access` (ਹਮੇਸ਼ਾ ਸ਼ਾਮਲ ਹੁੰਦਾ ਹੈ) |

GET, HEAD, ਅਤੇ OPTIONS ਪੜ੍ਹਨ ਸਕੋਪ ਵਰਤਦੇ ਹਨ; ਹੋਰ ਵਿਧੀਆਂ ਲਿਖਣ ਸਕੋਪ ਵਰਤਦੀਆਂ ਹਨ। OAuth ਰਾਹੀਂ ਆਵਾਜ਼ ਅਤੇ ਬਿਲਿੰਗ ਵਿੱਚ ਤਬਦੀਲੀਆਂ ਉਪਲਬਧ ਨਹੀਂ ਹਨ; `POST /v1/voices/preview` `voices:read` ਵਰਤਦਾ ਹੈ ਕਿਉਂਕਿ ਇਹ ਆਵਾਜ਼ ਦੀ ਸੰਰਚਨਾ ਬਦਲੇ ਬਿਨਾਂ ਉਸਦਾ ਪ੍ਰੀਵਿਊ ਕਰਦਾ ਹੈ। MCP ਟੂਲ ਆਪਣੀ ਅਧਾਰਭੂਤ REST ਕਾਰਵਾਈ ਦਾ ਸਕੋਪ ਲਾਗੂ ਕਰਦੇ ਹਨ। ਜਦੋਂ ਅਧਿਕਾਰ ਦੇਣ ਵਾਲਾ ਵਰਤੋਂਕਾਰ ਦੋਵੇਂ ਸੰਸਥਾਵਾਂ ਨਾਲ ਸੰਬੰਧਿਤ ਹੋਵੇ, ਤਦ ਵੀ ਸੰਸਥਾਵਾਂ-ਵਿਚਕਾਰ ਟ੍ਰਾਂਸਫ਼ਰ ਅਸਵੀਕਾਰ ਕੀਤੇ ਜਾਂਦੇ ਹਨ। API-ਕੀ ਪ੍ਰਬੰਧਨ ਅਤੇ ਮਨੁੱਖੀ ਖਾਤਾ ਸੈਟਿੰਗਾਂ ਸਮੇਤ ਹੋਰ API ਪਰਿਵਾਰ OAuth ਰਾਹੀਂ ਉਪਲਬਧ ਨਹੀਂ ਹਨ। REST ਕਾਰਵਾਈ ਲਈ ਅਨੁਮਤੀ ਗੈਰਹਾਜ਼ਰ ਹੋਣ ਤੇ `403` ਵਾਪਸ ਮਿਲਦਾ ਹੈ, ਜਿਸ ਵਿੱਚ `WWW-Authenticate: Bearer error="insufficient_scope", scope="..."` ਹੁੰਦਾ ਹੈ। ਅਵੈਧ ਜਾਂ ਮਿਆਦ-ਪੂਰੀ ਹੋ ਚੁੱਕੇ ਐਕਸੈੱਸ ਟੋਕਨ `401` ਵਾਪਸ ਕਰਦੇ ਹਨ।


### MCP ਟੂਲ ਪ੍ਰਮਾਣੀਕਰਨ ਸੰਕੇਤ

`tools/list` ਵਿੱਚ ਹਰੇਕ ਟੂਲ ਵਿੱਚ ਉਸ ਟੂਲ ਦੀ REST ਕਾਰਵਾਈ ਦੇ ਸਕੋਪ ਨਾਲ `securitySchemes: [{"type": "oauth2", "scopes": ["agents:read"]}]` ਸ਼ਾਮਲ ਹੁੰਦਾ ਹੈ। ਜਨਤਕ ਦਸਤਾਵੇਜ਼ੀਕਰਨ ਟੂਲ ਖਾਲੀ ਸਕੋਪ ਸੂਚੀ ਵਰਤਦੇ ਹਨ ਅਤੇ ਫਿਰ ਵੀ ਪ੍ਰਮਾਣਿਤ ਕਨੈਕਸ਼ਨ ਦੀ ਲੋੜ ਹੁੰਦੀ ਹੈ।

ਕਿਸੇ ਟੂਲ ਦਾ ਸਕੋਪ ਨਾ ਰੱਖਣ ਵਾਲੇ ਵੈਧ ਟੋਕਨ ਨੂੰ HTTP `200` ਮਿਲਦਾ ਹੈ, ਜਿਸ ਵਿੱਚ JSON-RPC `result` ਹੁੰਦਾ ਹੈ ਜਿਸ ਵਿੱਚ `isError: true`, `content` ਵਿੱਚ ਵਿਆਖਿਆਤਮਕ ਟੈਕਸਟ, ਅਤੇ `_meta["mcp/www_authenticate"]` ਸ਼ਾਮਲ ਹੁੰਦਾ ਹੈ। ਆਖਰੀ ਇੱਕ ਐਰੇ ਹੈ ਜਿਸ ਵਿੱਚ `resource_metadata`, `error="insufficient_scope"`, `error_description`, ਅਤੇ ਲੋੜੀਂਦੇ `scope` ਵਾਲਾ ਬੇਅਰਰ ਚੈਲੈਂਜ ਹੁੰਦਾ ਹੈ। ਟੂਲ ਚਲਾਇਆ ਨਹੀਂ ਜਾਂਦਾ। ਵਧਾਈ ਹੋਈ ਸਹਿਮਤੀ ਦੀ ਬੇਨਤੀ ਕਰਨ ਲਈ ਇਸ ਚੈਲੈਂਜ ਦੀ ਵਰਤੋਂ ਕਰੋ। ਗੈਰਹਾਜ਼ਰ ਜਾਂ ਅਵੈਧ ਪ੍ਰਮਾਣੀਕਰਨ HTTP `401` ਨੂੰ `WWW-Authenticate` ਨਾਲ ਵਾਪਸ ਕਰਦਾ ਰਹਿੰਦਾ ਹੈ; REST ਸਕੋਪ ਅਸਫਲਤਾਵਾਂ HTTP `403` ਵਾਪਸ ਕਰਦੀਆਂ ਰਹਿੰਦੀਆਂ ਹਨ।

## ਪ੍ਰਮਾਣ-ਪੱਤਰ ਸੰਭਾਲ

API ਸਟੇਜਿੰਗ ਅਤੇ ਪ੍ਰੋਡਕਸ਼ਨ ਵਿੱਚ ਹਰ ਘੰਟੇ `python manage.py oauth_cleanup` ਚਲਾਉਂਦੀ ਹੈ। ਇਹ ਮਿਆਦ-ਪੂਰੀ ਹੋ ਚੁੱਕੀਆਂ ਅਧਿਕਾਰ ਬੇਨਤੀਆਂ ਅਤੇ ਡਿਵਾਈਸ ਕੋਡ ਹਟਾਉਂਦੀ ਹੈ। ਮਿਆਦ-ਪੂਰੀ ਹੋ ਚੁੱਕੇ ਐਕਸੈੱਸ ਟੋਕਨ, ਅਧਿਕਾਰ ਕੋਡ ਅਤੇ ਰਿਫ਼ਰੈਸ਼-ਟੋਕਨ ਹੈਸ਼ ਸਿਰਫ਼ ਤਦੋਂ ਹਟਾਏ ਜਾਂਦੇ ਹਨ ਜਦੋਂ ਉਨ੍ਹਾਂ ਦੀ ਗ੍ਰਾਂਟ ਰੱਦ ਹੋ ਜਾਂਦੀ ਹੈ ਜਾਂ ਪੂਰਾ ਪਰਿਵਾਰ ਨਿਸ਼ਕ੍ਰਿਆ ਹੋ ਜਾਂਦਾ ਹੈ। ਵਰਤੇ ਜਾ ਚੁੱਕੇ ਹੈਸ਼ ਉਦੋਂ ਤੱਕ ਰੱਖੇ ਜਾਂਦੇ ਹਨ ਜਦੋਂ ਤੱਕ ਪਰਿਵਾਰ ਕੋਲ ਵਰਤਣਯੋਗ ਰਿਫ਼ਰੈਸ਼ ਟੋਕਨ, ਅਧਿਕਾਰ ਕੋਡ, ਮਨਜ਼ੂਰਸ਼ੁਦਾ ਡਿਵਾਈਸ ਕੋਡ ਜਾਂ ਐਕਸੈੱਸ ਟੋਕਨ ਹੁੰਦਾ ਹੈ, ਤਾਂ ਜੋ ਕਲੀਨਅੱਪ ਰੀਪਲੇ ਪਛਾਣ ਨੂੰ ਅਯੋਗ ਨਾ ਕਰ ਸਕੇ।
