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

Azure Web App Easy Auth会话超时问题咨询:/.auth/me返回空数组

解决Azure Web App Easy Auth会话超时后Angular无法获取令牌的问题

问题原因分析

Easy Auth的会话(由Web App生成的认证Cookie)超时后,/.auth/me接口会返回空数组;而Angular作为单页应用,前端路由跳转不会触发服务器端的Auth检查,因此Web App不会自动重定向到登录页,导致客户端无法重新获取令牌。

具体解决方案

1. 客户端主动检查会话状态并触发登录

在Angular中通过HTTP拦截器统一处理所有API请求,先验证/.auth/me的返回结果:

  • 若返回空数组,直接跳转到Web App的登录端点(如/.auth/login/aad,需根据你的身份提供者调整),触发Easy Auth的重定向登录流程。
  • 登录完成后,Web App会自动跳回原应用页面,此时/.auth/me即可重新获取有效令牌。

示例拦截器代码:

import { Injectable } from '@angular/core';
import { HttpRequest, HttpHandler, HttpEvent, HttpInterceptor, switchMap } from '@angular/common/http';
import { Observable } from 'rxjs';

@Injectable()
export class AuthInterceptor implements HttpInterceptor {
  constructor(private http: HttpClient) {}

  intercept(request: HttpRequest<unknown>, next: HttpHandler): Observable<HttpEvent<unknown>> {
    return this.http.get('/.auth/me').pipe(
      switchMap((authData: any[]) => {
        if (authData.length === 0) {
          // 会话过期,跳转至Easy Auth登录页
          window.location.href = '/.auth/login/aad';
          throw new Error('Authentication session expired');
        }
        // 提取令牌并添加到请求头
        const accessToken = authData[0].access_token;
        const authenticatedReq = request.clone({
          setHeaders: {
            Authorization: `Bearer ${accessToken}`
          }
        });
        return next.handle(authenticatedReq);
      })
    );
  }
}

2. 调整Azure Web App的会话超时配置

在Azure Portal的Web App「Authentication」设置中,找到「Session management」:

  • 延长Token store的过期时间,默认1小时,可根据业务需求调整为8小时等更长时长。
  • 开启Persistent session,让认证Cookie持久化到浏览器,用户关闭浏览器后重新打开仍能保持登录状态,减少闲置超时触发频率。

3. 让API请求触发服务器端Auth检查

若Angular调用的REST API通过Web App反向代理转发,可配置反向代理规则,确保API路径经过Easy Auth认证检查:

  • 对于IIS托管的Web App,修改web.config中的重写规则,添加对API路径的Auth验证要求。
  • 对于Linux/容器化Web App,使用routes.json配置路由规则,指定API路径需要认证。
    这样会话过期时,Web App会直接对API请求返回401状态码,Angular捕获后再触发登录跳转。

注意事项

  • 确保Web App的「Allowed external redirect URLs」包含Angular应用的基础路径,避免登录后跳转失败。
  • 根据实际使用的身份提供者调整登录端点路径(如Azure AD为/.auth/login/aad,Google为/.auth/login/google)。
  • 若需静默刷新令牌,可使用Easy Auth的/.auth/refresh接口,但需确保refresh_token处于有效期内。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 22:25:48