Azure AD通过Azure CLI添加密钥

时间:2016-04-12 06:35:01

标签: azure azure-active-directory azure-ad-graph-api azure-cli

我正在尝试使用Azure CLI在Azure AD应用程序中添加密钥。 但是,通过Azure CLI API,似乎没有这样的命令。

例如:

我正在尝试通过Azure CLI从以下链接自动执行任务: http://blog.davidebbo.com/2014/12/azure-service-principal.html

我可以创建AD应用程序,服务主体,但我找不到为新创建的AD应用程序添加密钥的方法。

我会感激任何想法和方向:)

提前致谢!

2 个答案:

答案 0 :(得分:3)

对于新的AD应用程序,您可以在创建时使用-p指定密钥。例如,

azure ad app create -n <your application name> --home-page <the homepage of you application> -i <the identifier URI of you application> -p <your key>

对于现有的AD应用程序,Graph API肯定能够更新AD Application Credential。阅读this API reference,您可以看到密码凭证能够使用“POST,GET,PATCH”。但是,使用Graph API太复杂了。我检查了Azure CLI。该功能尚未实现,并且源代码对我来说是不可读的。然后,我看了一下Azure SDK for Python,因为我熟悉python,我发现他们已经在2.0.0rc2中实现了它。请参阅GitHub Repo

我写了一个python脚本。但是,为了使用我的脚本,您不仅需要安装azure2.0.0rc2,还要安装msrest和msrestazure。

from azure.common.credentials import UserPassCredentials
from azure.graphrbac import GraphRbacManagementClient, GraphRbacManagementClientConfiguration
from azure.graphrbac.models import ApplicationCreateParameters, PasswordCredential

credentials = UserPassCredentials("<your Azure Account>", "<your password>")

subscription_id = "<your subscription id>"

tenant_id = "<your tenant id>"

graphrbac_client = GraphRbacManagementClient(
    GraphRbacManagementClientConfiguration(
        credentials,
        subscription_id,
        tenant_id
    )
)

application = graphrbac_client.application.get('<your application object id>')

passwordCredential = PasswordCredential(start_date="2016-04-13T06:08:04.0863895Z", 
                                        end_date="2018-04-13T06:08:04.0863895Z",
                                        value="<your new key>")

parameters = ApplicationCreateParameters(application.available_to_other_tenants,
                                     application.display_name,
                                     "<the homepage of your AD application>",
                                     application.identifier_uris,
                                     reply_urls=application.reply_urls,
                                     password_credentials = [passwordCredential])

application = graphrbac_client.application.update('<your application object id>', parameters)

此脚本的唯一问题是您只能覆盖AD应用程序的所有现有密钥。您无法附加新密钥。这是Graph API的问题。 Graph API不允许用户读取现有密钥。一种可能的解决方案是将现有密钥存储在其他位置。但是,这会带来额外的安全风险。

答案 1 :(得分:1)

我没有任何自动添加密钥的经验,我不确定它是否可能是诚实的。但是,请查看Graph API中的ApplicationEntity文档,可以使用对Web服务的POST请求。