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

使用Microsoft Azure Identity认证时Safari提示“非安全表单”如何解决?

解决Microsoft Graph交互式认证的浏览器安全提示及HTTPS报错问题

问题根源

你遇到的问题本质是浏览器对**非安全上下文(HTTP协议)**的限制:

  • Safari对HTTP环境下的表单提交校验更严格,直接标记为"表单不安全";
  • Chrome虽然无弹窗,但HTTP的localhost会被标记为不安全站点;
  • 直接改用HTTPS后,由于本地服务没有受信任的SSL证书,MSAL库会触发证书验证失败的报错。

解决方案步骤

1. 生成本地自签名SSL证书

推荐使用mkcert工具生成受本地浏览器和JVM信任的自签名证书,步骤如下:

  • 安装mkcert(可通过包管理器或官方渠道下载)
  • 生成localhost证书:
    mkcert localhost
    
    执行后会得到localhost.pem(证书文件)和localhost-key.pem(私钥文件)。

2. 转换证书为Java兼容的Keystore格式

MSAL Java依赖JVM的SSL信任存储,需要将证书转换为PKCS12格式:

openssl pkcs12 -export -in localhost.pem -inkey localhost-key.pem -out keystore.p12 -name "localhost"

执行时设置一个自定义密码(比如password123),后续启动应用会用到。

3. 调整应用代码及Azure AD配置

  • 修改InteractiveBrowserCredentialBuilder的重定向URL为HTTPS:
    credential = new InteractiveBrowserCredentialBuilder()
                    .clientId(clientId)
                    .tenantId(tenantId)
                    .redirectUrl("https://localhost:4242")
                    .tokenCachePersistenceOptions(new TokenCachePersistenceOptions())
                    .build();
    
    _userClient = new GraphServiceClient(credential, graphUserScopes);
    
  • 登录Azure门户,找到你的应用注册,在认证页面添加https://localhost:4242作为重定向URI并保存。

4. 启动Java应用时指定SSL参数

在启动应用的VM参数中添加以下配置,让JVM信任我们生成的证书:

-Djavax.net.ssl.keyStore=./keystore.p12 
-Djavax.net.ssl.keyStorePassword=password123 
-Djavax.net.ssl.trustStore=./keystore.p12 
-Djavax.net.ssl.trustStorePassword=password123

注意替换password123为你之前设置的Keystore密码,确保keystore.p12路径正确。


验证效果

  • 启动应用后,交互式认证会打开HTTPS的localhost回调地址,浏览器会信任这个自签名证书(mkcert已将根证书添加到本地信任存储);
  • Safari不再弹出"表单不安全"提示,Chrome地址栏也会显示安全标识;
  • MSAL库不会再触发SSL证书验证报错,认证及API调用正常。

内容的提问来源于stack exchange,提问作者pro-kswe

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 16:11:00