编程创建AzureAD SAML SSO非库应用时Identifier(Entity ID)未正确更新
问题说明
- 调用Microsoft Graph API可成功创建AAD SAML SSO非库企业应用,但创建完成后AAD门户的编辑弹窗中*Identifier (Entity ID)(标识符/实体ID)值未填充,该值仅显示在弹窗外部的Basic SAML Configuration(基本SAML配置)*区域下,附对应界面截图。
- 使用服务提供方工具测试该SAML配置时SSO调用失败,必须手动返回AAD门户在编辑弹窗中更新Entity ID值后SSO才可正常运行,经排查问题由Entity ID更新不一致导致。
- 当前实现代码如下:
// Create Application Application app = new Application(); app.displayName = "TestName"; app.identifierUris = Arrays.asList("some uri"); app.web = new WebApplication(); app.web.redirectUris = Arrays.asList("https://testredirect.com"); Application registeredApp = graphServiceClient.applications() .buildRequest() .post(app); // Create Service principal ServicePrincipal sp = new ServicePrincipal(); sp.appId = registeredApp.appId; sp.preferredSingleSignOnMode = "saml"; sp.tags = Arrays.asList("WindowsAzureActiveDirectoryCustomSingleSignOnApplication", "WindowsAzureActiveDirectoryIntegratedApp"); ServicePrincipal createdServicePrincipal = graphServiceClient.servicePrincipals() .buildRequest() .post(sp);
原因与修复方案
问题核心是遗漏了Service Principal层面的SAML配置项:AAD门户SAML编辑弹窗读取的是服务主体(Service Principal)的samlSingleSignOnSettings属性值,而非应用注册(Application)对象上的identifierUris,当前代码仅在Application对象设置了identifierUris,没有同步配置SP对应的SAML参数,才会出现两处显示不一致、SSO调用失败的问题。
修复方式是在创建完Service Principal后,发起PATCH请求更新该SP的samlSingleSignOnSettings配置,补充entityId、回复URL等必填SAML参数,参考代码如下:
// 构建SAML SSO配置 SamlSingleSignOnSettings samlSettings = new SamlSingleSignOnSettings(); samlSettings.entityId = "你的Entity ID值"; // 和identifierUris保持一致即可 // 补充SAML回复URL,和配置的redirectUris对应 samlSettings.replyUrl = "https://testredirect.com"; // 更新已创建的Service Principal ServicePrincipal updateSp = new ServicePrincipal(); updateSp.samlSingleSignOnSettings = samlSettings; graphServiceClient.servicePrincipals(createdServicePrincipal.id) .buildRequest() .patch(updateSp);
补充说明:
- 配置完成后无需手动在门户编辑,SAML编辑弹窗会自动读取到设置的Entity ID值
- 建议将
samlSingleSignOnSettings.entityId和Application对象的identifierUris值保持一致,避免后续配置漂移 - 目前
samlSingleSignOnSettings.entityId仅支持单个值,多实体ID场景需要后续通过门户或Graph API补充到基本SAML配置集合中
内容的提问来源于stack exchange,提问作者Ram
相关产品推荐
相关产品推荐

