如何使用应用程序ID及其密钥之一进行身份验证?

时间:2018-06-22 08:00:04

标签: azure

从我的question here可以理解,我可以在Active Directory中设置应用程序注册,并且可以使用在应用程序注册中设置的应用程序ID和密钥进行身份验证。

这是一个如何做到这一点的例子?

应用程序ID(我理解也称为客户端ID)和我添加到键集合中的键与服务主体有什么结合?

[更新]

来自this link about service principals

如果我理解正确,我们将不再谈论“应用程序密钥”,而是在谈论“应用程序凭证”。我猜这是同一回事吗?

以下段落让我无可救药地混淆了“应用程序凭据”,“登录凭据”和“服务主体的凭据”之间的区别:

“要使用服务主体登录,请在Connect-AzureRmAccount cmdlet中使用-ServicePrincipal参数。您还将需要服务主体的应用程序ID,登录凭据以及与该服务主体相关联的租户ID。为了获取服务主体的凭据作为适当的对象,请使用Get-Credential cmdlet。此cmdlet将显示一个对话框,用于在其中输入服务主体用户ID和密码。“

[更新]

根据答案to my question here,我已经可以使用以下应用程序设置来运行HelloKeyVault:

VaultUrl,AuthClientId和AuthCertThumbprint

没有提及服务主体或“密钥”或“令牌”

现阶段我只是想了解https://docs.microsoft.com/en-gb/azure/key-vault/key-vault-get-started中的说明。

2 个答案:

答案 0 :(得分:1)

您通常使用服务主体在CI / CD环境(如VSTS)或PowerShell脚本内部署/管理资源。选中Sign in with a service principal

答案 1 :(得分:0)

在修复Powershell脚本sample application here中的错误之后,从reported here

我能够运行HelloKeyVault源代码

 class Program
{
    static KeyVaultClient keyVaultClient;
    static InputValidator inputValidator;

    static void Main(string[] args)
    {

        KeyBundle keyBundle = null; // The key specification and attributes
        SecretBundle secret = null;
        CertificateBundle certificateBundle = null;
        string keyName = string.Empty;
        string secretName = string.Empty;
        string certificateName = string.Empty;
        string certificateCreateName = string.Empty;

        inputValidator = new InputValidator(args);

        ServiceClientTracing.AddTracingInterceptor(new ConsoleTracingInterceptor());
        ServiceClientTracing.IsEnabled = inputValidator.GetTracingEnabled();

        var clientId = ConfigurationManager.AppSettings["AuthClientId"];
        var cerificateThumbprint = ConfigurationManager.AppSettings["AuthCertThumbprint"];

        var certificate = FindCertificateByThumbprint(cerificateThumbprint);
        var assertionCert = new ClientAssertionCertificate(clientId, certificate);

        keyVaultClient = new KeyVaultClient((authority, resource, scope) => GetAccessToken(authority, resource, scope, assertionCert), 
               new InjectHostHeaderHttpMessageHandler());
         // etc

这表明我们可以使用AuthClientId和AuthCertThumbprint获取令牌

在这种情况下,应由AuthClientId给出应用程序ID,由AuthCertThumbprint给出“验证密钥”

没有提到服务主体。