@criipto/verify-expo

中文文档
4.0.3发布于 2026/10/22MITES Module构建来源已验证近 30 天下载 4867

接受 MitID, NemID, 瑞典 BankID, 挪威 BankID , 并在您的 Expo (React-Native) app 中接受更多登录

中文使用文档
文档目录7 节
  1. 所需资源
  2. 安装
  3. 初始化
  4. 开始
  5. 暖和起来
  6. 电子会议(仅iOS)
  7. 偶像

criipto 验证- expo

Idura 校验 Expo SDK 允许您的用户与许多欧洲的 eID 提供者进行认证 。 它允许您的申请作为 公共客户端意思是它不使用客户秘密 而是使用 捷克 以确保恶意行为者无法拦截授权代码.

除了基本的OIDC流量,SDK还支持 应用程序切换。 。 。 .

所需资源

  • 曝光 SDK 54个或较新 (舰只反应原生0.81 /克特林 2.1.20 / AGP 8.11).
  • 机器人 minSdkVersion 26个或较新。 博览会的预建默认值为 24, 所以你必须明确选择通过 expo-build-properties 看到了吗 安装。 。 。 .
  • iOS系统 17.4 或更新,与 use_frameworks! :linkage => :dynamic. Idura 校验 iOS SDK 作为 Swift 软件包分发,需要动态框架链接. 博览会插件通过 expo-build-properties。 。 。 .
  • 这个模块包括了本土代码,因此不会与"博览会Go"合作. 比如说,你必须用一个建筑 npx expo run:ios 编号 : npx expo run:android 或EAS Build. (英语).

两个平台都派代表到本地的Idura验证SDKs(机器人, (中文(简体) ), iOS系统) (中文(简体) ). 旧的博览会发行量的消费者应保持 @criipto/verify-expo 3.x (中文(简体) ).

安装

npm install @criipto/verify-expo expo-build-properties

初始化

SDK需要配置两条信息:

  • 你的"偶像"域名.
  • 你的偶像客户身份证.

SDK假设:

  • 你会用你的 Idura 域名 ,以主机运行您的重定向 URL(既可以使用自定义域, *.criipto.id, 也可以使用 *.idura. 经纪域).
  • 您的重定向 URL 将是 https://[YOUR IDURA DOMAIN]/[ios|android]/callback目前,不支持自定义重定向 URL 。 需要的话就打开一个问题.

您应该注册在 偶像仪表板。如果您的域为 https://samples.criipto.id,您应当同时注册 https://samples.criipto.id/ios/callback 财务报告和审定财务报表 https://samples.criipto.id/android/callback。 。 。 .

然后配置两个插件在 app.json。 。 。 . expo-build-properties 必须显示 在此之前 @criipto/verify-expo 因此,它首先被应用:

"plugins": [
  ["expo-build-properties", {
    "android": { "minSdkVersion": 26 },
    "ios": { "useFrameworks": "dynamic", "deploymentTarget": "17.4" }
  }],
  ["@criipto/verify-expo", {
    "domain": "YOUR_IDURA_DOMAIN",
    "clientID": "urn:my:application:identifier:XXXX"
  }]
]

插件失败 expo prebuild 如果其中任何一项要求未得到满足,则有方便复制的错误.

开始

打电话 login() 直接——没有供货商或接通电线. 配置( E)domain, (中文(简体) ), clientID生活在这里 app.json 并被本地模块读取。 将结果保存在自己的状态( A)useStatezustand,反应-平稳——你的电话),因为包裹没有为你保留一个:

// src/LoginButton.jsx
import { useState } from "react";
import { Button, Text } from "react-native";
import { login, OAuth2Error, UserCancelledError } from "@criipto/verify-expo";

export default function LoginButton() {
  const [claims, setClaims] = useState(null);
  const [error, setError] = useState(null);

  const handlePress = async (acrValues) => {
    try {
      const { id_token, trace_id, claims } = await login({ acrValues });
      setClaims(claims);
      setError(null);
    } catch (e) {
      if (e instanceof UserCancelledError) return; // expected; not an error condition
      setError(e);
      setClaims(null);
    }
  };

  return (
    <>
      <Button
        onPress={() => handlePress("urn:grn:authn:dk:mitid:substantial")}
        title="Login with Danish MitID"
      />
      <Button
        onPress={() => handlePress("urn:grn:authn:se:bankid:same-device")}
        title="Login with Swedish BankID"
      />
      <Button onPress={() => handlePress("urn:grn:authn:se:frejaid")} title="Login with Freja ID" />
      <Button
        onPress={() => handlePress("urn:grn:authn:no:bankid:substantial")}
        title="Login with Norwegian BankID"
      />

      {error ? <Text>An error occurred: {error.toString()}</Text> : null}
      {claims ? <Text>{JSON.stringify(claims, null, 2)}</Text> : null}
    </>
  );
}

失败时 login() 扔出已打出的错误 : UserCancelledError 对于拒绝流动的用户, OAuth2Error 对于IP错误, NoSuitableBrowserError (Android- only) 当没有安装自定义 Tab 功能浏览器时, 加上 ModuleNotConfiguredError 编号 : UnknownPromptError 编号 : IduraVerifyInternalError都带着SDK的 trace_id 如果有的话,请在Idura仪表板中找到相关数据.

暖和起来

土生土长的SDK是建立在第一个 login() 调用,即当OIDC发现时,JWKS取取和-在Android上-可使用浏览器的扫描发生. 要删除登录路径, 打电话 warmUp() 从屏幕上记录到的效果中:

import { useEffect } from "react";
import { warmUp } from "@criipto/verify-expo";

useEffect(() => {
  warmUp();
}, []);

它完全是可选的,从不扔出,而且不只打一次就便宜了。 因为它没有报告,一个配置错误的应用程序仍然失败 login() 与 ModuleNotConfiguredError ——原生地侧记下原因 CriiptoVerifyExpo 标记(logcat)或通过 NSLog,这样你就可以看到它 同时连接一个集成.

电子会议(仅iOS)

用于显示登录页面的网页视图允许您在ephemeral或共享浏览器会话中选择.

  • 届会 与用户的默认浏览器共享不 cookie,因此用户可能必须输入他们的登录细节. 这是默认.
  • 共享会议 与用户的默认浏览器共享 cookie,因此登录细节可能在登录之间被记住. 然而,系统每次用户登录时都会呈现一个权限对话框("Your App"想用'idura.broctor'来签名").

默认值是使用平时会话 .

根据您申请的UX要求,由您决定哪个流量更好。 并非所有的eID都要求用户在网页视图中输入任何内容——例如瑞典BankID将用户直接带到他们的认证器应用. 为此原因,您可能也想要使用共享会话来进行一些 eID 而不是其他 。 过 preferEphemeralSession 编辑 login() 调用以覆盖每流 :

await login({
  acrValues: "urn:grn:authn:dk:mitid:substantial",
  preferEphemeralSession: false, // opt into a shared browser session
});

丹麦 MITID 支持 a 重新校正流量,所以如果需要重新认证用户的MitID,则不需要依赖共享浏览器会话.

在Android上,参数被默默地忽略了:自定义 Tab会话不与浏览器共享饼干,而Android SDK则不暴露选择.

偶像

了解更多关于Idura的信息,并注册到您的免费开发者账户 (原始内容存档于2016-10-12). idura.eu。 。 。 .

版本与发布记录

@criipto/verify-expo 共发布 26 个版本,首次发布于 2023/07/17;过去 12 个月发布了 10 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
4.0.3latest2026/10/2219 天前
4.0.3-0beta2026/10/2120 天前
4.0.22026/09/072 个月前
4.0.12026/08/252 个月前
4.0.02026/07/024 个月前
4.0.0-22026/06/025 个月前

关于 @criipto/verify-expo 的常见问题

@criipto/verify-expo 是什么?

接受 MitID, NemID, 瑞典 BankID, 挪威 BankID , 并在您的 Expo (React-Native) app 中接受更多登录

如何安装 @criipto/verify-expo?

在项目目录运行 npm install @criipto/verify-expo,或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖:expo(>=54)、react(>=19)、react-native(>=0.81)。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖,Yarn 需要手动安装。

@criipto/verify-expo 支持 TypeScript 吗?

该包的 package.json 没有声明类型入口。需要类型提示时,可以在 npm 上查找社区维护的 @types/criipto__verify-expo 是否存在。

@criipto/verify-expo 支持 ESM 还是 CommonJS?

以 ES Module 形式发布,推荐使用 import 引入。在 CommonJS 项目中,Node.js 20.19+ / 22.12+ 可以直接 require() 不含顶层 await 的 ES Module,更早的版本需要改用动态 import()。

@criipto/verify-expo 可以商用吗?

@criipto/verify-expo 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@criipto/verify-expo 的下载量有多少?

根据 npm 官方下载统计,@criipto/verify-expo 在 2026/10/11 – 2026/11/09 这 30 天内被下载 4,867 次,日均约 162 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@criipto/verify-expo 还在维护吗?

最新版本 4.0.3 发布于 2026/10/22(19 天前);至今共发布 26 个版本,其中过去 12 个月发布了 10 个;首次发布于 2023/07/17。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。