如何在C#中实现Azure Easy Auth的.auth/refresh端点调用?
在C#中调用Azure Easy Auth的
.auth/refresh端点刷新令牌的解决方案 核心原因
浏览器中用$.ajax调用/.auth/refresh时,会自动携带App Service身份验证生成的会话Cookie(如ARRAUTH开头的Cookie),Easy Auth通过这个Cookie识别有效会话并完成令牌刷新。但C# HttpClient默认不会自动处理这类Cookie,也不能直接提交刷新令牌请求,这是导致401的关键。
可行实现方式
方式一:复用会话Cookie容器
在HttpClient中维护同一个Cookie容器,确保登录后的会话Cookie被携带到refresh请求中:
// 初始化带Cookie容器的HttpClientHandler var cookieContainer = new CookieContainer(); using var handler = new HttpClientHandler { UseCookies = true, CookieContainer = cookieContainer }; using var client = new HttpClient(handler); // 先完成身份验证流程(比如通过OAuth2授权回调获取会话Cookie) // 此处省略登录回调的处理逻辑,确保Cookie已存入cookieContainer // 调用刷新端点(使用POST方法) var refreshResponse = await client.PostAsync("https://your-app.azurewebsites.net/.auth/refresh", null); refreshResponse.EnsureSuccessStatusCode(); // 验证请求是否成功
方式二:手动携带当前访问令牌
如果不想依赖Cookie,可以在请求头中携带当前有效的访问令牌(注意不是刷新令牌),使用X-ZUMO-AUTH头或Authorization: Bearer头:
using var client = new HttpClient(); // 替换为当前有效的访问令牌 client.DefaultRequestHeaders.Add("X-ZUMO-AUTH", "your-active-access-token"); // 发送POST请求到刷新端点 var refreshResponse = await client.PostAsync("https://your-app.azurewebsites.net/.auth/refresh", null); refreshResponse.EnsureSuccessStatusCode();
关键注意事项
- 确保App Service身份验证设置中已启用允许令牌刷新(在Azure门户的应用服务→身份验证→对应身份提供商的配置中开启)。
- 必须使用POST方法调用
/.auth/refresh,非浏览器客户端的GET请求可能被Easy Auth拦截返回401。 - 携带的令牌必须是当前未过期的访问令牌,而非刷新令牌——Easy Auth会通过会话或有效令牌自动触发刷新逻辑,无需手动提交刷新令牌。
内容的提问来源于stack exchange,提问作者LeonidasFett
相关产品推荐
相关产品推荐

