Digital Credentials API: هویت امن و خصوصی در وب

منتشر شده: ۳ اکتبر ۲۰۲۵

ما مفتخریم اعلام کنیم که API مربوط به اعتبارنامه‌های دیجیتال (Digital Credentials API) اکنون به طور پیش‌فرض از کروم ۱۴۱ فعال شده است. علاوه بر این، iOS 26 پشتیبانی از API مربوط به اعتبارنامه‌های دیجیتال را به کروم و سایر مرورگرها اضافه می‌کند. این API سطح جدیدی از امنیت و حریم خصوصی را برای تأیید هویت در وب به ارمغان می‌آورد و روشی استاندارد را برای وب‌سایت‌ها فراهم می‌کند تا اطلاعات قابل تأیید را از کاربران درخواست و دریافت کنند.

پس از یک دوره آزمایشی موفقیت‌آمیز در Origin ، رابط برنامه‌نویسی کاربردی (API) اعتبارنامه‌های دیجیتال (Digital Credentials API) اکنون از ارائه اعتبارنامه در همان دستگاه در اندروید و ارائه بین دستگاهی در کروم دسکتاپ پشتیبانی می‌کند.

پیشینه

تأیید هویت آنلاین تاکنون فرآیندی پیچیده بوده است که اغلب مستلزم آپلود اسکن‌های کارت شناسایی توسط کاربران بوده است. این عمل اغلب به معنای به اشتراک گذاشتن داده‌های بیشتر از حد لازم است که نگرانی‌های قابل توجهی در مورد حریم خصوصی کاربران ایجاد می‌کند. برای توسعه‌دهندگان نیز این امر ریسک ایجاد می‌کند، زیرا آنها باید اطمینان حاصل کنند که راه‌حل آنها قادر به پردازش و ذخیره داده‌های حساس اغلب غیریکنواخت به روشی امن و با حفظ حریم خصوصی است.

در عین حال، مقرراتی مانند eIDAS 2.0 دولت‌ها را ملزم به ارائه ابزارهای شناسایی دیجیتال به عموم مردم می‌کند. این کیف پول‌های هویت دیجیتال باید بتوانند مدارک مختلفی از جمله مدرک هویت و سن را در خود جای دهند. ارائه دهندگان خدمات آنلاین می‌توانند این مدارک را برای تأیید هویت کاربر درخواست کنند.

با توجه به پتانسیل اعتبارنامه‌های دیجیتال برای برآورده کردن خواسته‌های کاربران برای حفظ حریم خصوصی و نیازهای توسعه‌دهندگان برای تأیید داده‌های کاربر، جامعه استانداردهای وب در W3C راه‌حلی را توسعه داده است: API اعتبارنامه‌های دیجیتال . API اعتبارنامه‌های دیجیتال با معرفی یک رابط داخلی برای تأیید اطلاعات کاربر، که امنیت، حریم خصوصی و تجربه کاربری را در مقایسه با گزینه‌های دیگر بهبود می‌بخشد، قصد دارد این مشکل را برطرف کند. با این API، کاربران دیگر نیازی به آپلود اسناد حساس مانند اسکن‌های شناسایی در چندین وب‌سایت ندارند. در عوض، وب‌سایت‌ها می‌توانند با درخواست فقط داده‌های خاص و امضا شده رمزنگاری شده مورد نیاز خود از صادرکنندگان معتبر، اعتماد کاربران خود را جلب کنند.

ویژگی‌های اصلی

رابط برنامه‌نویسی کاربردی (API) اعتبارنامه‌های دیجیتال بر سه اصل اساسی ساخته شده است: حریم خصوصی، پشتیبانی از پلتفرم‌های مختلف و استانداردسازی.

حریم خصوصی

API اعتبارنامه‌های دیجیتال، حریم خصوصی و امنیت آنلاین را افزایش می‌دهد. این API به کاربران اجازه می‌دهد تا یک شناسه دیجیتال از کیف پول‌های موبایل خود را به وب‌سایت‌ها ارائه دهند تا حقایق خاص را بدون افشای داده‌های حساس اساسی تأیید کنند. به عنوان مثال، API می‌تواند بدون افشای تاریخ تولد کامل کاربر، تأیید کند که بالای ۱۸ سال سن دارد. این اصل «افشای گزینشی» تضمین می‌کند که وب‌سایت‌ها فقط حداقل اطلاعات لازم را دریافت می‌کنند.

رابط برنامه‌نویسی کاربردی اعتبارنامه‌های دیجیتال (Digital Credentials API) همچنین با پروتکل‌های اثبات دانش صفر (ZKPs) مانند Longfellow ZK گوگل سازگار است که با ارائه یک اثبات رمزنگاری‌شده مبنی بر صحت یک ادعای هویت خاص، بدون افشای هیچ اطلاعات دیگری، حریم خصوصی کاربر را تضمین می‌کند.

پشتیبانی چند پلتفرمی

API مربوط به اعتبارنامه‌های دیجیتال (Digital Credentials API) با هدف پشتیبانی از پلتفرم‌های مختلف طراحی شده است تا کاربران بتوانند به راحتی اطلاعات تأیید شده را در دستگاه‌های مختلف ارائه دهند.

در اندروید: یک رابط کاربری داخلی ارائه می‌دهد که به کاربران امکان می‌دهد اعتبارنامه‌ها را از برنامه کیف پول نصب شده خود انتخاب کنند.

روی دسکتاپ: کاربران می‌توانند اطلاعات کیف پول موبایل خود را به وب‌سایتی در مرورگر دسکتاپ خود ارائه دهند. با اسکن یک کد QR، سیستم یک اتصال امن، رمزگذاری شده سرتاسری و مقاوم در برابر فیشینگ بین دسکتاپ و دستگاه موبایل برقرار می‌کند. این اتصال از پروتکل CTAP برای تأیید نزدیکی کاربر از طریق BLE استفاده می‌کند و اطمینان حاصل می‌کند که آنها از نظر فیزیکی حضور دارند و هر دو دستگاه را کنترل می‌کنند.

استانداردسازی

قابلیت همکاری کلید اصلی است. در کروم، رابط برنامه‌نویسی کاربردی اعتبارنامه‌های دیجیتال (Digital Credentials API) مستقل از پلتفرم پروتکل است و با پروتکل‌های مختلف ارائه، به عنوان مثال، OpenID4VP و پیوست C از ISO 18013-7 سازگار است. اپل همچنین پشتیبانی از رابط برنامه‌نویسی کاربردی اعتبارنامه‌های دیجیتال را از سافاری نسخه ۲۶.۰ معرفی کرده است.

علاوه بر این، رابط برنامه‌نویسی کاربردی (API) اعتبارنامه‌های دیجیتال (Digital Credentials API) بر اساس پشتیبانی داخلی مدیریت اعتبارنامه در اندروید و یک اکوسیستم رو به رشد از کیف پول‌های سازگار ساخته شده است. گوگل والت (Google Wallet) یکی از اولین پذیرندگان این قابلیت است و پشتیبانی از سامسونگ والت (Samsung Wallet) و 1Password نیز در راه است.

از زمان محاکمه Origin چه خبر است؟

کسانی که در آزمایش اولیه‌ی Origin ما شرکت کرده‌اند، متوجه خواهند شد که API مربوط به اعتبارنامه‌های دیجیتال از navigator.identity.get() به navigator.credentials.get() تغییر یافته است و آن را با تلاش گسترده‌تر برای یکپارچه‌سازی هویت با API مدیریت اعتبارنامه همسو کرده است. علاوه بر این، پارامتر providers به requests و request به data تغییر نام داده است.

پیاده‌سازی

ادغام API مربوط به اعتبارنامه‌های دیجیتال شامل دو مرحله اصلی است: تشخیص ویژگی و درخواست اعتبارنامه. توسعه‌دهندگان همچنین باید منطق سفارشی را پیاده‌سازی کنند تا مشخص شود که آیا برنامه آنها می‌تواند از اعتبارنامه‌ها استفاده کند یا خیر.

تشخیص ویژگی

قبل از اینکه دکمه‌ی «تأیید با اعتبارنامه‌ی دیجیتال» را نمایش دهید، بررسی کنید که آیا رابط برنامه‌نویسی کاربردی اعتبارنامه‌های دیجیتال در مرورگر کاربر موجود است یا خیر.

if (typeof DigitalCredential !== "undefined") {
  // Digital Credentials API is supported
} else {
  // Digital Credentials API is not supported
}

درخواست اعتبارنامه

درخواست یک اعتبارنامه شامل فراخوانی تابع navigator.credentials.get() به همراه یک پارامتر digital است. در نوع اعتبارنامه دیجیتال، آرایه requests را اضافه کنید که شامل DigitalCredentialGetRequest با پارامترهای اساسی زیر باشد:

  • protocol : یک پروتکل تبادل را با یک رشته مشخص کنید. برای مثال، "openid4vp" یا "org-iso-mdoc" . تشخیص اینکه آیا پروتکل توسط مرورگر پشتیبانی می‌شود یا خیر، به شرح زیر است:

    if (DigitalCredential.userAgentAllowsProtocol("example-protocol")) {
        // Create a request with this protocol
      } else {
        // Protocol is not supported
    }
    
  • data : یک شیء با پارامترهایی که برنامه‌های کیف پول دیجیتال برای پروتکل مشخص شده می‌پذیرند. برای "openid4vp" ، پارامترها در OpenID برای ارائه قابل تأیید (OID4VP) برای مشخصات API اعتبارنامه‌های دیجیتال W3C تعریف شده‌اند.

    try {
      const digitalCredential = await navigator.credentials.get({
        digital: {
          requests: [{
            protocol: "openid4vp-v1-unsigned",
            data: {
              response_type: "vp_token",
          nonce: "[some-nonce]",
              client_metadata: {...},
          dcql_query: {...}
            }
        }]
        }
      });
    
      // Decrypt payload respons and verify credentials on the backend
      const response = await fetch("/verify", {
        method: "POST",
          body: JSON.stringify(digitalCredential.data),
          headers: {
              'Content-Type': 'application/json'
          }
      });
    } catch (e) {
      // Handle errors, such as the user canceling the request
      console.error(e);
    }
    

برای مثال، برای درخواست نام خانوادگی کاربر، نام داده شده و یک مقدار بولی که نشان می‌دهد آیا کاربر بالای ۲۱ سال سن دارد یا خیر، می‌توانید payload زیر را مشخص کنید:

{
  protocol: 'openid4vp-v1-unsigned',
  data: {
    response_type: 'vp_token',
    nonce: '[some-nonce]',
    // Contains the Verifier metadata values, including supported credential formats and response encryption public key
    client_metadata: {
  // Supported credential formats. Refer to the documentation for specific values
        vp_formats_supported: {...},
   // Public key(s). Refer to the documentation for more detail.
        jwks: {...}
    },
    dcql_query: {
      // A wallet will try to find credentials it holds that match these definitions.
      credentials: [
        {
          // A locally unique identifier for this credential definition within the query.
          id: "cred_vc",
          format: "dc+sd-jwt",
          meta: {
            // 'vct_values' specifies the Verifiable Credential allowed type.
            // In this case, it's a European Digital Identity (EUDI) Personal Identification Data (PID) credential.
            vct_values: [
              "urn:eudi:pid:1"
            ]
          },
          // 'claims' is an array of specific data that's being requested.
          claims: [
            {
              // The path ["age_equal_or_over", "18"] corresponds to accessing `credential.age_equal_or_over['18']`.
              path: [
                "age_equal_or_over",
                "18"
              ]
            }
          ]
        }
      ]
    }
  }
}

در این مثال، client_metadata باید فهرستی از فرمت‌های پشتیبانی‌شده را مشخص کند. برای مشاهده‌ی مقادیر قابل استفاده، به مشخصات مراجعه کنید. مقدار اختیاری jwks که در client_metadata تنظیم شده است، باید حاوی کلیدهای عمومی مورد استفاده برای رمزگذاری پاسخ باشد. همچنین می‌توانید کد آزمایشی را برای مثال‌های بیشتر بررسی کنید.

در اینجا مثالی از یک payload پاسخ رمزگذاری شده شیء DigitalCredential آورده شده است:

{
    // This is an example for a response using an OpenID4VP protocol.
    // The format of the 'data' object will differ for other protocols.
    "protocol": "openid4vp-v1-unsigned",
    "data": {
        // To decrypt this JWE payload, use the private key.
   // The decrypted payload will be a JSON object containing the
       // Verifiable Presentation in the 'vp_token' claim.
        "response": "[jwe-token]"
    }
}

در این مثال، سیستم با پروتکل openid4vp-v1-unsigned درخواست اعتبارنامه می‌دهد و پاسخ شامل response در ویژگی data است.

روش دقیق تجزیه و تحلیل پاسخ به پروتکل بستگی دارد. شما معمولاً باید:

  1. رمزگشایی فایل پاسخ . روش رمزگشایی به پروتکل مورد استفاده بستگی دارد. نحوه رمزگشایی فایل پاسخ برای openid4vp (با استفاده از JWE) و org-iso-mdoc (با استفاده از رمزگذاری کلید عمومی ترکیبی) را ببینید.
  2. امضاها و صادرکننده را تأیید کنید . برای جزئیات بیشتر، به مستندات پذیرش آنلاین اعتبارنامه‌های دیجیتال مراجعه کنید.

برای دیدن نمونه‌های کد برای پروتکل‌های مختلف، کد مربوط به نسخه آزمایشی یا نسخه میزبانی شده زنده را بررسی کنید.

اعتماد به صادرکننده را تأیید کنید

امضای رمزنگاری‌شده‌ی اعتبارنامه‌های دیجیتال، اعتبارنامه را اثبات می‌کند. با این حال، توسعه‌دهندگان باید تأیید کنند که صادرکننده برای مورد استفاده‌ی خاص آنها مناسب و قابل اعتماد است. به عنوان مثال، برای اعطای تخفیف دانشجویی، یک سایت تجارت الکترونیک به اعتبارنامه‌ای نیاز دارد که توسط یک دانشگاه معتبر صادر شده باشد و اعتبارنامه‌ای که توسط هر نهاد دیگری امضا شده باشد را رد می‌کند. یک روش معمول برای تأیید اعتماد به صادرکننده، نگهداری لیستی از صادرکنندگان تأیید شده و رد هر صادرکننده‌ای است که با آن مطابقت نداشته باشد.

شروع کنید

آماده شروع ساخت‌وساز هستید؟ در اینجا آنچه باید بدانید آورده شده است.

  • دسترسی: کروم ۱۴۱ یا جدیدتر، رابط برنامه‌نویسی کاربردی اعتبارنامه‌های دیجیتال (Digital Credentials API) را به‌طور پیش‌فرض در پلتفرم‌های مختلف فعال می‌کند.
  • پیش‌نیازها: کاربران به یک دستگاه سازگار نیاز دارند، به عنوان مثال، اندروید با نسخه ۲۴.۰ یا بالاتر از سرویس‌های گوگل پلی، یا یک دستگاه iOS با نسخه ۲۶ یا بالاتر. دستگاه باید یک برنامه کیف پول دیجیتال نصب شده داشته باشد که از API اعتبارنامه‌های دیجیتال پشتیبانی کند، به عنوان مثال، گوگل والت یا یک کیف پول آزمایشی .
  • نسخه آزمایشی را امتحان کنید: بهترین راه برای درک تجربه کاربری و آزمایش پیاده‌سازی شما، امتحان کردن نسخه آزمایشی زنده در https://verifier.multipaz.org با کروم ۱۴۱ یا جدیدتر است.

منابع

برای اطلاعات بیشتر، منابع زیر را بررسی کنید:

بازخورد خود را به اشتراک بگذارید

اکنون که API اعتبارنامه‌های دیجیتال منتشر شده است، مایلیم از تجربه شما در ساخت آن مطلع شویم. برای به اشتراک گذاشتن بازخورد خود یا گزارش هرگونه اشکال ، یک مشکل ثبت کنید .