带有 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 身份验证访问数据,该身份验证应该适用于所有主要平台(至少大多数平台)。关键平台是 android、ios 和 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 应用程序