खास जानकारी
WebAuthn, वेब पर सार्वजनिक कुंजी वाले क्रेडेंशियल के आधार पर पुष्टि करने की सुविधा देकर, सुरक्षा को बेहतर बनाने में मदद करता है. यह सुविधा जल्द ही Chrome, Firefox, और Edge (अपडेट किए गए स्पेसिफ़िकेशन के साथ) में काम करेगी.
यह एक नए तरह का Credential
ऑब्जेक्ट जोड़ता है. हालांकि, इससे उन वेबसाइटों को समस्या आ सकती है जो क्रेडेंशियल मैनेजमेंट एपीआई का इस्तेमाल करती हैं. ऐसा तब होता है, जब वे इस्तेमाल किए जा रहे क्रेडेंशियल के टाइप का पता लगाने की सुविधा का इस्तेमाल नहीं करती हैं.
अगर फ़िलहाल, सुविधा का पता लगाने के लिए ऐसा किया जा रहा है
if (navigator.credentials && navigator.credentials.preventSilentAccess) {
// use CM API
}
इसके बजाय, ये करें
if (window.PasswordCredential || window.FederatedCredential) {
// Call navigator.credentials.get() to retrieve stored
// PasswordCredentials or FederatedCredentials.
}
if (window.PasswordCredential) {
// Get/Store PasswordCredential
}
if (window.FederatedCredential) {
// Get/Store FederatedCredential
}
if (navigator.credentials && navigator.credentials.preventSilentAccess) {
// Call navigator.credentials.preventSilentAccess()
}
उदाहरण के तौर पर, सैंपल कोड में किए गए बदलाव देखें.
ज़्यादा जानने के लिए आगे पढ़ें.
Credential Manager API क्या है
क्रेडेंशियल मैनेजमेंट एपीआई (CM API), वेबसाइटों को उपयोगकर्ता एजेंट के क्रेडेंशियल स्टोर का प्रोग्राम के हिसाब से ऐक्सेस देता है. इससे, कॉल करने वाले ऑरिजिन के लिए उपयोगकर्ता के क्रेडेंशियल को स्टोर/प्राप्त किया जा सकता है.
बुनियादी एपीआई ये हैं:
navigator.credentials.get()
navigator.credentials.store()
navigator.credentials.create()
navigator.credentials.preventSilentAccess()
ओरिजनल CM API स्पेसिफ़िकेशन में दो तरह के क्रेडेंशियल के बारे में बताया गया है:
PasswordCredential
FederatedCredential
PasswordCredential
एक क्रेडेंशियल है, जिसमें उपयोगकर्ता का आईडी और पासवर्ड शामिल होता है.
FederatedCredential
एक क्रेडेंशियल है, जिसमें उपयोगकर्ता का आईडी और एक स्ट्रिंग होती है. यह स्ट्रिंग, पहचान की पुष्टि करने वाली सेवा देने वाली कंपनी के बारे में बताती है.
इन दो क्रेडेंशियल की मदद से, वेबसाइटें ये काम कर सकती हैं:
- उपयोगकर्ता को साइट पर पहुंचते ही, पहले से सेव किए गए पासवर्ड या फ़ेडरेटेड क्रेडेंशियल से साइन-इन करने की अनुमति दें (अपने-आप साइन-इन),
- पासवर्ड पर आधारित या फ़ेडरेटेड क्रेडेंशियल सेव करें, जिसका इस्तेमाल करके उपयोगकर्ता ने साइन इन किया है,
- उपयोगकर्ता के साइन इन क्रेडेंशियल को अप-टू-डेट रखना (उदाहरण के लिए, पासवर्ड बदलने के बाद)
WebAuthn क्या है
WebAuthn (वेब ऑथेंटिकेशन), CM API में सार्वजनिक-कुंजी वाले क्रेडेंशियल जोड़ता है. उदाहरण के लिए, इससे वेबसाइटों को FIDO 2.0 के मुताबिक पुष्टि करने वाले डिवाइसों का इस्तेमाल करके, दो तरीकों से पुष्टि करने की सुविधा को लागू करने का एक मानक तरीका मिलता है.
तकनीकी लेवल पर, WebAuthn, PublicKeyCredential
इंटरफ़ेस की मदद से CM API को बढ़ाता है.
समस्या क्या है?
पहले हमने डेवलपर को CM API का पता लगाने के लिए, इस कोड का इस्तेमाल करने का सुझाव दिया था:
if (navigator.credentials && navigator.credentials.preventSilentAccess) {
// Use CM API
}
But as you can see from the descriptions above, the `navigator.credentials` is
now expanded to support public-key credentials in addition to password
credentials and federated credentials.
The problem is that user agents don't necessarily support all kinds of
credentials. If you continue feature detect using `navigator.credentials`, your
website may break when you are using a certain credential type not supported by
the browser.
**Supported credential types by browsers**
<table class="properties with-heading-tint"><tbody><tr>
<th></th>
<th>PasswordCredential / FederatedCredential</th>
<th>PublicKeyCredential</th>
</tr><tr><th>Chrome
</th><td>Available
</td><td>In development
</td></tr><tr><th>Firefox
</th><td>N/A
</td><td>Aiming to ship on 60
</td></tr><tr><th>Edge
</th><td>N/A
</td><td>Implemented with <a href="https://blogs.windows.com/msedgedev/2016/04/12/a-world-without-passwords-windows-hello-in-microsoft-edge/">older API</a>. New API (navigator.credentials) coming soon.
</td></tr></tbody></table>
## The solution
You can avoid this by modifying feature detection code as follows to explicitly
test for the credential type that you intend to use.
```js
if (window.PasswordCredential || window.FederatedCredential) {
// Call navigator.credentials.get() to retrieve stored
// PasswordCredentials or FederatedCredentials.
}
if (window.PasswordCredential) {
// Get/Store PasswordCredential
}
if (window.FederatedCredential) {
// Get/Store FederatedCredential
}
if (navigator.credentials && navigator.credentials.preventSilentAccess) {
// Call navigator.credentials.preventSilentAccess()
}
उदाहरण के तौर पर, सैंपल कोड में किए गए असल बदलाव देखें.
रेफ़रंस के तौर पर, WebAuthn में जोड़े गए PublicKeyCredential
का पता लगाने का तरीका यहां बताया गया है:
if (window.PublicKeyCredential) {
// use CM API with PublicKeyCredential added in the WebAuthn spec
}
टाइमलाइन
WebAuthn को सबसे पहले Firefox में लागू किया गया था. इसकी सुविधा मई 2018 की शुरुआत में पूरी तरह से काम करने वाली हो जाएगी.
आखिरकार
अगर आपका कोई सवाल है, तो उसे @agektmr या agektmr@chromium.org पर भेजें.