如何以编程方式为基于库的应用程序配置 Azure AD SSO?

How to configure Azure AD SSO programmatically for gallery-based application?

我需要为 Tableau Server 图库应用程序配置 Azure Active Directory SSO,因为它以编程方式在 MS 文档 link 下。是否有有用的 powershell cmdlets / rest apis?

我使用 MS docs 上第 1 步中的图 api 从图库创建应用程序。 要获取可用模板:

GET https://graph.microsoft.com/beta/applicationTemplates

创建模板应用:

POST https://graph.microsoft.com/beta/applicationTemplates/{id}/instantiate

现在我需要从代码配置 SAML SSO 并分配用户。有没有简单的方法可以做到这一点?我试过 Set-AzureADApplication 但它没有为我完成工作。企业应用程序仍未设置。 可能还不支持?我相信可以有一些解决方法。如有任何帮助,我将不胜感激。

Are there useful powershell cmdlets / rest apis?

是的,但根据我的测试,我们需要将其分成两部分。

1.Set Sign-on URL,为此,我们需要调用 Microsoft Graph - Update serviceprincipal.

在 Graph Explorer 中,使用下面的请求。

PATCH https://graph.microsoft.com/beta/servicePrincipals/<object-id of the service principal>

{
  "loginUrl": "https://azure.signtest.link"
}

注意:在上面的请求中,需要使用服务主体(企业应用)的object-id,而不是AD App(应用注册)。您可以在门户的 Azure AD 中找到它 -> Enterprise Application -> 找到您的 Tableau Server -> 如下所示获取 Object ID

2.Set IdentifierReply URL,我们可以通过 Powershell Set-AzureADApplication.

样本:

$Identifiers = @(
    "http://www.tableau.com/products/server",
    "https://azure.idtest.link"
)
$ReplyUrls = @(
    "https://azure.rptest.link/wg/saml/SSO/index.html"
)
Set-AzureADApplication -ObjectId <object-id of the AD App> -IdentifierUris $Identifiers -ReplyUrls $ReplyUrls 

对于 object-id of the AD App,导航到门户中的 Azure AD -> App registrations -> 找到你的 Tableau Server。 运行 命令后,设置将映射到企业应用程序。

在传送门查看结果:

更新:

不确定这是不是一个错误,如果我创建一个新应用程序而没有在门户中手动设置 IdentifierReply URL,然后只需使用上面的 powershell 来设置它们,它们就会未映射到门户。

但是如果我们直接通过 Microsoft Graph 检查服务主体(企业应用程序),我们可以看到 powershell 实际上影响了服务主体。

如果我们先在门户中手动配置设置,然后使用 powershell 用其他值更新它们,就可以了。

并且看起来无法通过 powrshell 或 API 设置 Default Reply URL,如果我们设置 Reply URL 与在门户中手动设置的不同,它将有如下提示。

但是如果我们查看它,实际上 Default 选项被选中了。

更新2:

最终,我找到了诀窍,这不是错误,我们只需要先通过 Microsoft Graph 为服务主体设置 preferredSingleSignOnMode,然后我们就不需要在门户中进行配置了手动。

样本:

PATCH https://graph.microsoft.com/beta/servicePrincipals/<object-id of the service principal>

{
  "preferredSingleSignOnMode":"saml",
  "loginUrl": "https://azure.signtest.link"
}