Flutter OpenID Connect Web核心功能插件oidc_web_core的使用

发布于 1周前 作者 sinazl 来自 Flutter

Flutter OpenID Connect Web核心功能插件oidc_web_core的使用

style: very_good_analysis Powered by Mason License: MIT

此包为oidc的核心web包。它不依赖于flutter,仅依赖于package:web,使其与WASM和dart web应用(如ngdart)兼容。

确保你阅读了wiki以获取更多信息。

安装 💻

❗ 要开始使用Oidc Web Core,必须在您的机器上安装Dart SDK

通过dart pub add进行安装:

dart pub add oidc_web_core

示例代码

以下是一个简单的示例代码,展示如何使用oidc_web_core插件。

示例项目说明

一个基本的Dart web应用程序。

使用package:web来与JS和DOM交互。

运行和构建

要运行应用程序,请激活并使用package:webdev

dart pub global activate webdev
webdev serve

要构建生产版本以供部署,请使用webdev build命令:

webdev build

要了解如何与web API和其他JS库进行互操作,请查看https://dart.dev/interop/js-interop

示例代码

import 'package:oidc_web_core/oidc_web_core.dart';

void main() {
  // 初始化OIDC客户端配置
  final config = OidcClientConfig(
    authority: 'https://your-identity-provider.com', // 身份提供商地址
    client_id: 'your-client-id', // 客户端ID
    redirect_uri: 'http://localhost:8080/callback', // 回调地址
    post_logout_redirect_uri: 'http://localhost:8080/logout', // 登出回调地址
    response_type: 'code', // 响应类型
    scope: 'openid profile email', // 请求范围
  );

  // 创建OIDC客户端实例
  final oidcClient = OidcClient(config);

  // 启动认证流程
  oidcClient.signIn().then((_) {
    print('用户已登录');
  }).catchError((error) {
    print('登录失败: $error');
  });
}

代码解释

  1. 导入oidc_web_core包

    import 'package:oidc_web_core/oidc_web_core.dart';
    
  2. 初始化OIDC客户端配置

    final config = OidcClientConfig(
      authority: 'https://your-identity-provider.com',
      client_id: 'your-client-id',
      redirect_uri: 'http://localhost:8080/callback',
      post_logout_redirect_uri: 'http://localhost:8080/logout',
      response_type: 'code',
      scope: 'openid profile email',
    );
    
    • authority:身份提供商的URL。
    • client_id:客户端ID。
    • redirect_uri:回调地址。
    • post_logout_redirect_uri:登出后的重定向地址。
    • response_type:响应类型,通常是code
    • scope:请求的范围,包括openidprofileemail
  3. 创建OIDC客户端实例

    final oidcClient = OidcClient(config);
    
  4. 启动认证流程

    oidcClient.signIn().then((_) {
      print('用户已登录');
    }).catchError((error) {
      print('登录失败: $error');
    });
    

更多关于Flutter OpenID Connect Web核心功能插件oidc_web_core的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter OpenID Connect Web核心功能插件oidc_web_core的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,关于如何在Flutter项目中使用oidc_web_core插件来实现OpenID Connect Web核心功能,下面是一个基本的代码示例。这个示例将展示如何配置和使用oidc_web_core插件来进行身份验证。

首先,确保你已经在pubspec.yaml文件中添加了oidc_web_core依赖:

dependencies:
  flutter:
    sdk: flutter
  oidc_web_core: ^最新版本号 # 请替换为当前最新版本号

然后,运行flutter pub get来安装依赖。

接下来,在你的Flutter项目中,你可以按照以下步骤实现OpenID Connect身份验证:

  1. 配置OpenID Connect提供者信息
import 'package:oidc_web_core/oidc_web_core.dart';

// OpenID Connect配置信息
final oidcConfiguration = OidcConfiguration(
  issuer: 'https://your-oidc-provider.com', // OIDC提供者URL
  clientId: 'your-client-id', // 你的客户端ID
  redirectUri: Uri.parse('https://your-redirect-uri.com/callback'), // 重定向URI
  scopes: ['openid', 'profile', 'email'], // 请求的作用域
);
  1. 创建并初始化OidcClient
import 'package:flutter/material.dart';
import 'package:oidc_web_core/oidc_web_core.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  OidcClient? _oidcClient;

  @override
  void initState() {
    super.initState();
    _initializeOidcClient();
  }

  Future<void> _initializeOidcClient() async {
    _oidcClient = await OidcClient.create(oidcConfiguration);

    // 监听认证状态变化
    _oidcClient!.onAuthenticated!.listen((user) {
      // 用户已认证
      print('User authenticated: ${user.toJson()}');
      setState(() {}); // 更新UI,如果需要的话
    });

    _oidcClient!.onSignedOut!.listen((_) {
      // 用户已登出
      print('User signed out');
      setState(() {}); // 更新UI,如果需要的话
    });

    // 检查当前是否有有效的认证会话
    await _oidcClient!.loadUser();
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: Text('Flutter OIDC Demo')),
        body: Center(
          child: _oidcClient!.user != null
              ? Text('User is authenticated')
              : ElevatedButton(
                  onPressed: () async {
                    try {
                      await _oidcClient!.login();
                    } catch (e) {
                      print('Login error: $e');
                    }
                  },
                  child: Text('Login'),
                ),
        ),
      ),
    );
  }

  @override
  void dispose() {
    _oidcClient?.dispose();
    super.dispose();
  }
}

在这个示例中,我们创建了一个OidcClient实例,并配置了必要的OIDC提供者信息。我们还设置了两个监听器来监听用户的认证和登出事件。在UI中,我们检查用户是否已经认证,如果未认证,则显示一个登录按钮。点击登录按钮将触发OIDC登录流程。

请注意,这个示例假设你已经在OIDC提供者那里注册了你的客户端,并且你有正确的clientIdredirectUri。此外,你可能还需要在你的OIDC提供者后台配置重定向URI以允许Flutter应用进行回调。

这个示例提供了一个基本的框架,你可以根据自己的需求进一步扩展和自定义,比如处理登录错误、显示用户信息、实现登出功能等。

回到顶部