---
title: "OAuth ನೊಂದಿಗೆ ಸಂಪರ್ಕಿಸಿ"
description: "API ಕೀಲಿಯನ್ನು ಹಂಚಿಕೊಳ್ಳದೆ 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"]` ಮತ್ತು ಯೂಸರ್‌ಇನ್ಫೊ ಎಂಡ್‌ಪಾಯಿಂಟ್ ಇರುತ್ತವೆ. 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` ಹೆಡರ್ ಮೂಲಕ ಮಾತ್ರ ಕಳುಹಿಸಿ. ಟೋಕನ್‌ಗಳನ್ನು URLಗಳು, ಲಾಗ್‌ಗಳು, ಸೋರ್ಸ್ ಕಂಟ್ರೋಲ್ ಅಥವಾ ಚಾಟ್‌ನಲ್ಲಿ ಎಂದಿಗೂ ಇರಿಸಬೇಡಿ.

### ರಿಫ್ರೆಶ್ ಮತ್ತು ಹಿಂತೆಗೆದುಕೊಳ್ಳಿ

ಟೋಕನ್ ಎಂಡ್‌ಪಾಯಿಂಟ್‌ನಲ್ಲಿ `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` ತೆರೆಯಿರಿ.

ಕನಿಷ್ಠ ಹಿಂತಿರುಗಿದ `interval` (5 ಸೆಕೆಂಡುಗಳು) ನಿರೀಕ್ಷಿಸಿ, `grant_type=urn:ietf:params:oauth:grant-type:device_code`, `client_id`, ಮತ್ತು `device_code` ನೊಂದಿಗೆ ಟೋಕನ್ ಎಂಡ್‌ಪಾಯಿಂಟ್ ಅನ್ನು ಪೋಲ್ ಮಾಡಿ. `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 ಕೀಗಳು ಯೂಸರ್‌ಇನ್ಫೊವನ್ನು ಕರೆಯಲು ಸಾಧ್ಯವಿಲ್ಲ. ಯಾವುದೇ 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 ಕಾರ್ಯಾಚರಣೆಯಲ್ಲಿ ಕಾಣೆಯಾದ ಅನುಮತಿಯು `WWW-Authenticate: Bearer error="insufficient_scope", scope="..."` ಜೊತೆಗೆ `403` ಅನ್ನು ಹಿಂತಿರುಗಿಸುತ್ತದೆ. ಅಮಾನ್ಯ ಅಥವಾ ಅವಧಿ ಮೀರಿದ ಪ್ರವೇಶ ಟೋಕನ್‌ಗಳು `401` ಅನ್ನು ಹಿಂತಿರುಗಿಸುತ್ತವೆ.


### MCP ಉಪಕರಣ ದೃಢೀಕರಣ ಸಂಕೇತಗಳು

`tools/list` ನಲ್ಲಿರುವ ಪ್ರತಿಯೊಂದು ಉಪಕರಣವು ಆ ಉಪಕರಣದ REST ಕಾರ್ಯಾಚರಣೆಯ ಸ್ಕೋಪ್‌ನೊಂದಿಗೆ `securitySchemes: [{"type": "oauth2", "scopes": ["agents:read"]}]` ಅನ್ನು ಒಳಗೊಂಡಿರುತ್ತದೆ. ಸಾರ್ವಜನಿಕ ದಸ್ತಾವೇಜೀಕರಣ ಉಪಕರಣಗಳು ಖಾಲಿ ಸ್ಕೋಪ್ ಪಟ್ಟಿಯನ್ನು ಬಳಸುತ್ತವೆ ಮತ್ತು ಇನ್ನೂ ದೃಢೀಕೃತ ಸಂಪರ್ಕವನ್ನು ಅಗತ್ಯಪಡಿಸುತ್ತವೆ.

ಉಪಕರಣದ ಸ್ಕೋಪ್ ಇಲ್ಲದ ಮಾನ್ಯ ಟೋಕನ್‌ಗೆ HTTP `200` ದೊರೆಯುತ್ತದೆ; ಅದರಲ್ಲಿ `isError: true` ಹೊಂದಿರುವ JSON-RPC `result`, `content` ನಲ್ಲಿ ವಿವರಣಾತ್ಮಕ ಪಠ್ಯ, ಮತ್ತು `_meta["mcp/www_authenticate"]` ಇರುತ್ತವೆ. ಎರಡನೆಯದು `resource_metadata`, `error="insufficient_scope"`, `error_description`, ಮತ್ತು ಅಗತ್ಯವಿರುವ `scope` ಹೊಂದಿರುವ Bearer ಸವಾಲನ್ನು ಒಳಗೊಂಡ ಅರೇ ಆಗಿದೆ. ಉಪಕರಣವನ್ನು ಕಾರ್ಯಗತಗೊಳಿಸಲಾಗುವುದಿಲ್ಲ. ವಿಸ್ತರಿತ ಸಮ್ಮತಿಯನ್ನು ವಿನಂತಿಸಲು ಈ ಸವಾಲನ್ನು ಬಳಸಿ. ಕಾಣೆಯಾದ ಅಥವಾ ಅಮಾನ್ಯ ದೃಢೀಕರಣವು `WWW-Authenticate` ಜೊತೆಗೆ HTTP `401` ಅನ್ನು ಹಿಂತಿರುಗಿಸುವುದನ್ನು ಮುಂದುವರಿಸುತ್ತದೆ; REST ಸ್ಕೋಪ್ ವಿಫಲತೆಗಳು `403` ಅನ್ನು ಹಿಂತಿರುಗಿಸುವುದನ್ನು ಮುಂದುವರಿಸುತ್ತವೆ.

## ರುಜುವಾತುಗಳ ಸಂರಕ್ಷಣೆ

API ಸ್ಟೇಜಿಂಗ್ ಮತ್ತು ಪ್ರೊಡಕ್ಷನ್‌ನಲ್ಲಿ ಪ್ರತಿ ಗಂಟೆಗೆ `python manage.py oauth_cleanup` ಅನ್ನು ಚಲಾಯಿಸುತ್ತದೆ. ಇದು ಅವಧಿ ಮೀರಿದ ಅಧಿಕಾರ ವಿನಂತಿಗಳು ಮತ್ತು ಸಾಧನ ಕೋಡ್‌ಗಳನ್ನು ತೆಗೆದುಹಾಕುತ್ತದೆ. ಅವಧಿ ಮೀರಿದ ಪ್ರವೇಶ ಟೋಕನ್‌ಗಳು, ಅಧಿಕಾರ ಕೋಡ್‌ಗಳು ಮತ್ತು ರಿಫ್ರೆಶ್-ಟೋಕನ್ ಹ್ಯಾಶ್‌ಗಳನ್ನು ಅವುಗಳ ಅನುಮತಿದಾನವನ್ನು ಹಿಂತೆಗೆದುಕೊಂಡ ನಂತರ ಅಥವಾ ಸಂಪೂರ್ಣ ಕುಟುಂಬವು ನಿಷ್ಕ್ರಿಯವಾದ ನಂತರ ಮಾತ್ರ ಕತ್ತರಿಸಲಾಗುತ್ತದೆ. ಕುಟುಂಬದಲ್ಲಿ ಬಳಸಬಹುದಾದ ರಿಫ್ರೆಶ್ ಟೋಕನ್, ಅಧಿಕಾರ ಕೋಡ್, ಅನುಮೋದಿತ ಸಾಧನ ಕೋಡ್ ಅಥವಾ ಪ್ರವೇಶ ಟೋಕನ್ ಇರುವಾಗ ಬಳಸಿದ ಹ್ಯಾಶ್‌ಗಳನ್ನು ಉಳಿಸಿಕೊಳ್ಳಲಾಗುತ್ತದೆ; ಆದ್ದರಿಂದ ಸ್ವಚ್ಛಗೊಳಿಸುವಿಕೆಯು ಮರುಬಳಕೆ ಪತ್ತೆಯನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ.
