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

# साइन-इन के तरीके: पासकी, कोड, सोशल, SSO

> Didit के साथ पासवर्ड, ईमेल कोड, मैजिक लिंक, फ़ोन कोड, पासकी, सोशल, संगठन SSO और Didit ID Wallet साइन-इन कॉन्फ़िगर करें, साथ में MFA और पासवर्ड रीसेट भी।

> [!WARNING]
>
> प्रमाणीकरण नया है। होस्टेड साइन-इन पेज इस पेज पर दिए गए सभी तरीकों को चलाता है। यहाँ सूचीबद्ध JSON endpoints उन टीमों के लिए हैं जो अपनी साइन-इन स्क्रीन खुद बनाती हैं (`sign_in_ui: "own"`)।

अपने एप्लिकेशन के प्रमाणीकरण प्रबंधन API पर `PUT methods/{name}/` और `{"enabled": true}` भेजकर कोई तरीका चालू करें, या कंसोल से चालू करें। होस्टेड साइन-इन में केवल वही तरीके दिखते हैं जो आपने चालू किए हैं।

| तरीका | नाम | सेटअप |
| - | - | - |
| पासवर्ड | `password` | ईमेल साइन-अप के लिए पासवर्ड के साथ भी इसकी ज़रूरत होती है। |
| ईमेल कोड | `code` | कोई नहीं। |
| मैजिक लिंक | `magic` | कोई नहीं। केवल होस्टेड पेज पर। |
| फ़ोन कोड | `phone` | फ़ोन सत्यापन वर्कफ़्लो का `workflow_id` भेजें। |
| पासकी | `passkey` | कोई नहीं। |
| सोशल साइन-इन | `google`, `microsoft`, `apple`, `github` | आपका अपना `client_id` और `client_secret`। सैंडबॉक्स एप्लिकेशन इसके बजाय Didit के टेस्ट ऐप इस्तेमाल कर सकते हैं (`credential_source: "didit_test"`)। |
| संगठन SSO | `sso` | हर ग्राहक संगठन के लिए एक SAML या OIDC कनेक्शन। |
| Didit ID Wallet | `wallet` | हमेशा चालू। इसे बंद नहीं किया जा सकता। |

नीचे दी गई हर JSON कॉल `POST authorize/` से मिले `transaction` से शुरू होती है। वह लेन-देन 10 मिनट तक मान्य रहता है। सफल साइन-इन `{code, redirect_uri, state}` लौटाता है। कोड को 60 सेकंड के भीतर `POST token/` पर बदलें (देखें [token और JWKS](https://docs.didit.me/hi/authentication/tokens-and-jwks.md))।

कोड मिलने के बजाय, साइन-इन कॉल इनमें से कोई चरण लौटा सकती है। वह चरण पूरा करें, तभी आपको कोड मिलेगा।

| प्रतिक्रिया | अगला चरण |
| - | - |
| `challenge` और `factors` के साथ `mfa_required` | TOTP या रिकवरी कोड भेजें, या पासकी इस्तेमाल करें (देखें [MFA](#mfa))। |
| `challenge` और `uri` के साथ `mfa_enrollment_required` | MFA नीति के अनुसार एक प्रमाणक ज़रूरी है। इसे `POST mfa/setup/` से पंजीकृत करें। |
| `challenge` और `methods` के साथ `protection_required` | [बॉट सुरक्षा](https://docs.didit.me/hi/authentication/bot-protection.md) नीति एक अतिरिक्त प्रमाण माँगती है। |
| `verification_url` के साथ `verification_required` | आपकी सत्यापन सेटिंग्स साइन-अप या साइन-इन पर लाइवनेस या ID जाँच माँगती हैं। व्यक्ति को `verification_url` पर भेजें (30 मिनट तक मान्य); स्वीकृत जाँच के बाद कोड मिलता है। |

## पासवर्ड

`POST password/` में `transaction`, `email` और `password` भेजे जाते हैं।

* पासवर्ड आपकी `password_min_length` सीमा (8, 10, 12 या 14 अक्षर; डिफ़ॉल्ट 10) पर खरा उतरना चाहिए। आम और केवल संख्याओं वाले पासवर्ड `password_policy` के साथ अस्वीकार किए जाते हैं। जब [लीक पासवर्ड जाँच](https://docs.didit.me/hi/authentication/bot-protection.md#लीक-हुए-पासवर्ड) चालू हो, तो ज्ञात लीक पासवर्ड `password_breached` के साथ अस्वीकार किया जाता है।
* केवल सत्यापित ईमेल वाले लोग पासवर्ड से साइन इन कर सकते हैं।
* गलत पासवर्ड, अज्ञात ईमेल, असत्यापित ईमेल, लॉक किया हुआ खाता और ब्लॉक किया हुआ खाता, सभी को एक ही उत्तर मिलता है: `400 {"error": "invalid_credentials"}`। आपका UI यह नहीं बता सकता कि असल में कौन-सी स्थिति थी, और कोई हमलावर भी नहीं बता सकता।

### साइन-अप

साइन-अप में पहले ईमेल सत्यापित होता है। `purpose: "signup"`, `email` और `password` के साथ `POST email/start/` कॉल करें, फिर कोड के साथ `POST email/complete/` कॉल करें। खाता सत्यापित ईमेल के साथ बनता है।

* `signup_policy` तय करती है कि साइन-अप कौन कर सकता है: `anyone`, `invited` (केवल आमंत्रण लिंक के साथ) या `allowed_domains`।
* `allow_subaddresses: false` (डिफ़ॉल्ट) होने पर, स्थानीय भाग में `+` वाला पता अस्वीकार किया जाता है।
* जब आपकी ब्रांडिंग में शर्तों या गोपनीयता लिंक सेट हों, तो होस्टेड साइन-अप फ़ॉर्म व्यक्ति से उन्हें स्वीकार करने को कहता है।

## ईमेल कोड

`POST email/start/` में `transaction`, `purpose` (`login` या `signup`) और `email` भेजे जाते हैं, और यह `202 {challenge, expires_in: 600}` लौटाता है। व्यक्ति को 10 मिनट तक मान्य 6 अंकों का कोड मिलता है।

`POST email/complete/` में `transaction`, `purpose`, `challenge` और `code` भेजे जाते हैं। आपको 5 प्रयास मिलते हैं, उसके बाद व्यक्ति को नया कोड माँगना होगा। होस्टेड पेज 30 सेकंड बाद नया कोड देने की पेशकश करता है।

ऐसे पते के लिए लॉगिन कोड जिसका खाता नहीं है, अगर आपकी `signup_policy` इसकी अनुमति देती है तो खाता बना देता है। यह बिना पासवर्ड वाला साइन-अप है।

## मैजिक लिंक

होस्टेड पेज 15 मिनट तक मान्य एक साइन-इन लिंक भेजता है। यह मूल PKCE लेन-देन से जुड़ा रहता है, इसलिए लिंक केवल उसी फ़्लो में काम करता है जिसने उसे शुरू किया था। जिस पेज को लिंक खोलता है, उस पर व्यक्ति साइन-इन की पुष्टि करता है। मैजिक लिंक के लिए कोई JSON endpoint नहीं है।

## फ़ोन कोड

`POST phone/start/` में `transaction`, `phone` और वैकल्पिक `channel` (`sms`, डिफ़ॉल्ट, या `whatsapp`) भेजे जाते हैं। नंबर को E.164 में सामान्य किया जाता है। यह `202 {challenge, expires_in: 600}` लौटाता है।

`POST phone/complete/` में `transaction`, `challenge` और 6 अंकों का `code` भेजे जाते हैं। आपको 5 प्रयास मिलते हैं।

* फ़ोन कोड Didit के फ़ोन सत्यापन से भेजे जाते हैं। इस तरीके को उस वर्कफ़्लो के `workflow_id` के साथ चालू करें जिसमें फ़ोन सत्यापन शामिल हो।
* फ़ोन से पहली बार साइन-इन तभी खाता बनाता है जब `signup_policy` `anyone` हो।
* अगर डिलीवरी विफल हो, तो कॉल `503 {"error": "delivery_unavailable"}` लौटाती है।

## पासकी

पासकी WebAuthn का उपयोग करती हैं। रिलाइंग पार्टी आपके एप्लिकेशन का साइन-इन मूल-स्थान है। Didit डिस्कवर करने योग्य क्रेडेंशियल (रेज़िडेंट कुंजी) माँगता है और हमेशा उपयोगकर्ता सत्यापन की ज़रूरत रखता है, जैसे फ़िंगरप्रिंट, चेहरा या डिवाइस PIN। Didit अटेस्टेशन नहीं माँगता।

| कॉल | बॉडी | परिणाम |
| - | - | - |
| `POST passkeys/begin/` | `{transaction}` | `navigator.credentials.get()` के लिए `{challenge, options}`। कोई क्रेडेंशियल सूची नहीं भेजी जाती, इसलिए ब्राउज़र आपके मूल-स्थान की हर पासकी दिखाता है। |
| `POST passkeys/complete/` | `{challenge, credential}` | एक साइन-इन कोड, या अगला चरण। |
| `POST passkeys/register/` | खाली, `Authorization: Bearer <access_token>` के साथ | `navigator.credentials.create()` के लिए विकल्प। |
| `POST passkeys/confirm/` | `{challenge, credential}`, उसी token के साथ | नई पासकी का `{id}`। |

* पासकी चुनौती 5 मिनट तक मान्य रहती है।
* पासकी जोड़ने के लिए 5 मिनट के भीतर बना सत्र चाहिए। अन्यथा कॉल `403 {"error": "reauthentication_required"}` लौटाती है। पहले व्यक्ति को दोबारा साइन इन कराएँ।
* पासकी से साइन-इन को मल्टी-फ़ैक्टर माना जाता है।
* साइन-अप के बाद होस्टेड पेज पासकी जोड़ने की पेशकश करता है (`passkeys/setup/begin/` और `passkeys/setup/complete/`)।
* एप्लिकेशन में पंजीकृत Android ऐप्स वही पासकी इस्तेमाल कर सकते हैं।

## सोशल साइन-इन

Google, Microsoft, Apple और GitHub से साइन-इन के लिए आप अपने OAuth ऐप के क्रेडेंशियल का उपयोग करते हैं, जिन्हें `PUT methods/{provider}/` और `credentials: {client_id, client_secret}` से सेट किया जाता है। प्रोवाइडर का कॉलबैक आपके साइन-इन ओरिजिन पर होता है।

किसी व्यक्ति का किसी प्रोवाइडर से पहली बार साइन-इन करने पर उसे कोड के साथ यह भी साबित करना होता है कि ईमेल पता उसी का है (`POST social/email/start/` और `POST social/email/verify/`)। उस प्रोवाइडर से बाद के साइन-इन में यह चरण छोड़ दिया जाता है।

GitHub हाल के साइन-इन को साबित नहीं कर सकता, इसलिए जब आप `prompt=login` या `max_age` भेजते हैं तो यह विकल्प उपलब्ध नहीं होता।

## संगठन SSO

संगठन SSO किसी ग्राहक की कंपनी को उसके अपने SAML या OIDC आइडेंटिटी प्रोवाइडर के जरिए साइन-इन करने देता है। इसे हर ग्राहक संगठन के लिए `organizations/{id}/sso/` पर `protocol` (`saml` या `oidc`), `enabled` और `config` के साथ कॉन्फ़िगर करें।

* आप ग्राहक की IT टीम को 7 दिन तक वैध सेटअप लिंक भेज सकते हैं।
* आपका SAML सर्विस प्रोवाइडर मेटाडेटा `{origin}/sso/saml/metadata/` पर प्रकाशित होता है।
* होस्टेड साइन-इन व्यक्ति के सत्यापित ईमेल डोमेन से, या साइन-इन URL पर `organization=<slug>` से कनेक्शन खोजता है।

## Didit ID Wallet

जो लोग पहले से Didit के साथ सत्यापन कर चुके हैं, वे अपने Didit ID Wallet से साइन-इन कर सकते हैं। यह विधि हमेशा चालू रहती है। इसके बाद सत्र की `verified_identity` में वही जानकारी होती है जो व्यक्ति ने साझा करना चुना है।

## MFA

दूसरा फ़ैक्टर ऑथेंटिकेटर ऐप (TOTP) है, जिसके साथ रिकवरी कोड मिलते हैं, या पासकी।

* `mfa_policy` तय करती है कि MFA किसे अनिवार्य रूप से इस्तेमाल करना होगा: `optional`, `everyone` या `organization_admins` (डिफ़ॉल्ट)। जिसने ऑथेंटिकेटर का नामांकन किया है, उसे हमेशा इसका इस्तेमाल करना होगा।
* ऑथेंटिकेटर नामांकित करने के लिए ताज़ा सत्र (5 मिनट के भीतर बना हुआ) के साथ `POST mfa/enroll/` कॉल करें। यह `{challenge, uri}` लौटाता है; `uri` को QR कोड के रूप में दिखाएँ। फिर पहला कोड `POST mfa/confirm/` पर भेजें। रिस्पॉन्स में 10 ऐसे रिकवरी कोड जिनका केवल एक बार इस्तेमाल किया जा सकता है होते हैं। इन्हें केवल एक बार दिखाएँ।
* साइन-इन के समय `challenge` के साथ TOTP या रिकवरी कोड `POST mfa/complete/` पर भेजें। आपको 5 प्रयास मिलते हैं। इसके बजाय पासकी इस्तेमाल करने के लिए `POST mfa/passkey/begin/` और `POST mfa/passkey/complete/` कॉल करें।
* कोड 30-सेकंड के चरणों पर आधारित होते हैं। जो कोड पहले ही स्वीकार हो चुका है, उसे दोबारा इस्तेमाल नहीं किया जा सकता।
* SMS और ईमेल कोड दूसरे फ़ैक्टर के रूप में उपलब्ध नहीं हैं।

## पासवर्ड भूलना और रीसेट करना

`POST password-reset/start/` `email` लेता है और `202 {"status": "sent", "expires_in": 1800}` लौटाता है। पता किसी खाते से जुड़ा हो या न हो, जवाब एक जैसा रहता है। रीसेट लिंक 30 मिनट तक वैध रहता है।

`POST password-reset/complete/` `token` और `password` लेता है और `{"status": "password_changed"}` लौटाता है। यह निम्नलिखित भी करता है:

* लॉकआउट साफ़ करता है,
* `revoke_on_password_change` चालू होने पर (डिफ़ॉल्ट रूप से चालू) हर सत्र समाप्त कर देता है,
* उस व्यक्ति के बाकी लंबित कोड और लिंक अमान्य कर देता है।

## आमंत्रण

`signup_policy: "invited"` के साथ केवल आमंत्रित लोग साइन अप कर सकते हैं। आमंत्रण लिंक 7 दिन तक वैध रहता है और होस्टेड `/invite` पेज खोलता है।

[टोकन और JWKS](https://docs.didit.me/hi/authentication/tokens-and-jwks.md) के साथ जारी रखें, या लॉकआउट और चुनौतियों के लिए [बॉट सुरक्षा](https://docs.didit.me/hi/authentication/bot-protection.md) पढ़ें।


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.