带有 Windows Azure oauth2 登录的 Flutter 应用程序多平台应用程序

Posted

技术标签:

【中文标题】带有 Windows Azure oauth2 登录的 Flutter 应用程序多平台应用程序【英文标题】:Flutter app multiplatform app with Windows Azure oauth2 login 【发布时间】:2021-11-28 10:29:50 【问题描述】:

我们正在开发一个 Flutter 项目,我们希望通过 Windows Azure Oauth2 身份验证访问数据,该身份验证应该适用于所有主要平台(至少大多数平台)。关键平台是 androidios 和 web,但最好还有 windows-native、linux、fuchsia 等。

问题主要是,我们还没有找到任何支持 Web 平台(edge、chrome、safari +++)的 Flutter 库,它可以按预期工作。

我们看到许多(通常是较旧的)帖子说网络方法尚不可用。

是否有任何支持所有库的库,是否有人有任何人都知道的示例(在 github(?)上针对 Azure 的完整“开箱即用”工作),最近可用?

【问题讨论】:

【参考方案1】:

您可以将包 msal_js 用于 web,aad_oauth 用于 ios 和 android。

要将这些组合到一个多平台项目中,您需要亲自动手。

一种可能的解决方案:

在您的项目中创建 4 个文件:auth_manager_stub.dart、iAuth_manager.dart、auth_manager_native.dart、auth_manager_web.dart。

   //auth_manager_stub.dart
   import 'auth_manager.dart';

   AuthManager getManager() =>
    throw UnsupportedError('Cannot create an auth manager');


  

我们的接口文件。

import 'auth0_manager_stub.dart'
       if (dart.library.io) 'package:aad_oauth/aad_oauth.dart'
       if (dart.library.js) 'package:msal_js/msal_js.dart';

abstract class AuthManager 
  static AuthManager? _instance;

  static AuthManager? get instance 
    _instance ??= getManager();
    return _instance;
  

  Future<User> login();

我们的 auth_manager_native.dart 文件将如下所示:

import 'package:aad_oauth/aad_oauth.dart';
import 'package:aad_oauth/model/config.dart';
import 'iAuth_manager.dart';
//other imports

AuthManager getManager() => Auth0Manager();

class Auth0Manager extends AuthManager 
  String? accessToken;

  @override
  Future<void> Login() async 
    //some native code....
  


我们的 web.dart 文件是这样的:

import 'package:msal_js/msal_js.dart';
import 'auth_manager.dart';
import 'dart:js' as js;
import 'iAuth_manager.dart';

AuthManager getManager() => Auth0ManagerForWeb();

class Auth0ManagerForWeb extends AuthManager 



  @override
  Future<String> Login() async 
    //web-specific code here
  

只需在平台特定文件中为每个平台实现不同的登录方法即可。

在我们的 main.dart 文件中,我们可以这样做:

void login() async 
   AuthManager.instance?.Login();

我们将根据我们使用的设备调用具体策略。 各个库的使用以及我们如何实现它们超出了这个问题的范围。

归功于this medium article 和this

【讨论】:

以上是关于带有 Windows Azure oauth2 登录的 Flutter 应用程序多平台应用程序的主要内容,如果未能解决你的问题,请参考以下文章

带有 Spring Boot 和 Azure AD 的 KeyCloak

Azure AD:带有 PKCE 的代码流:没有为应用程序启用 id_token

Windows 10 上带有 Azure AD 示例的 Flask 应用程序

使用 Azure AD 通过 OAuth2 对 Azure API 管理进行身份验证

PHP 中的 Azure 身份验证错误

在世纪互联版的Microsoft Azure上做windows虚拟机的批量部署--用powershell做部署