You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter集成Azure SSO后无法访问同机构关联站点的问题咨询

方案可行性与实现步骤

这个方案完全可行,Azure AD支持跨应用(包括移动端→Web应用)的SSO会话共享,只要配置正确,就能实现移动端登录后无需重复验证即可访问关联的Web站点。

Azure端配置细节

  • 确保移动端应用与所有目标Web应用处于同一Azure AD租户下,且Web应用已完成Azure SSO(SAML/OIDC)配置。
  • 移动端应用注册需配置正确的重定向URI:
    • Android:格式为msal{CLIENT_ID}://auth(需在AndroidManifest.xml中注册对应的intent filter)
    • iOS:格式为msal{CLIENT_ID}://auth(需在Info.plist中配置URL Scheme)
    • 上述URI必须在Azure门户的应用注册→“认证”页面中添加并启用。
  • 配置跨应用权限:
    • 若目标Web应用为OIDC类型:在移动端应用的“API权限”页面,添加目标Web应用的委托权限(如access_as_user),并由管理员授予同意。
    • 若目标Web应用为SAML类型:确保Azure AD中已建立移动端应用与Web应用的信任关系,允许移动端的登录会话被SAML身份提供者识别。
  • 启用会话共享:Azure AD默认支持同租户下的SSO会话共享,但需确保登录请求未强制要求重新验证(如避免prompt=login参数)。

Flutter端实现细节

  • 修正Scope配置:当前代码仅请求了基础身份范围(openid profile offline_access),无法获取访问目标Web应用的有效Token。需添加目标Web应用的API范围,格式为api://{WEB_APP_CLIENT_ID}/{PERMISSION_NAME}。
  • 获取目标应用的Access Token:登录成功后,需确保获取的Token是针对目标Web应用的,而非默认的Microsoft Graph Token。
  • 内置WebView配置:
    • 使用支持Cookie共享的WebView组件(如webview_flutter),并启用第三方Cookie支持,确保Azure AD的会话Cookie能被正确携带。
    • 若目标Web应用为OIDC类型,可将获取到的Access Token通过Authorization: Bearer {TOKEN}请求头传入WebView;若为SAML类型,直接跳转至Web应用的登录URL,Azure AD会自动识别移动端会话完成SSO。

解决当前401/重定向登录问题

你的代码核心问题是Scope未包含目标Web应用的权限,导致获取的Token无法被Web应用授权。修改后的代码示例:

static final Config config = new Config(
    tenant: "YOUR_TENANT_ID",
    clientId: "YOUR_CLIENT_ID",
    // 添加目标Web应用的API权限范围
    scope: "openid profile offline_access api://WEB_APP_CLIENT_ID/access_as_user",
    redirectUri: "msalYOUR_CLIENT_ID://auth", // 与Azure门户配置一致
    navigatorKey: navigatorKey,
    webUseRedirect: true,
    loader: Center(child: CircularProgressIndicator()),
    postLogoutRedirectUri: 'msalYOUR_CLIENT_ID://auth/logout', // 可选
  );

final AadOAuth oauth = new AadOAuth(config);

// 执行登录
final result = await oauth.login();
// 获取针对目标Web应用的Access Token
final accessToken = await oauth.getAccessToken();

// 使用WebView加载目标Web应用,携带Token
WebView(
  initialUrl: "https://your-web-app-url.com",
  javascriptMode: JavascriptMode.unrestricted,
  headers: {
    'Authorization': 'Bearer $accessToken',
  },
  cookieManager: WebViewCookieManager(),
);

额外检查项:

  • 确认重定向URI与Azure门户配置完全一致,包括大小写和格式。
  • 若使用SAML Web应用,确保WebView跳转的是Azure AD提供的SAML登录端点,而非Web应用的本地登录页。

内容的提问来源于stack exchange,提问作者Escanor

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 12:01:31