代码之家  ›  专栏  ›  技术社区  ›  Kirsten

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

  •  1
  • Kirsten  · 技术社区  · 7 年前

    从我 question here 我知道可以在active directory中设置应用程序注册,并且可以使用在应用程序注册中设置的应用程序id和密钥进行身份验证。

    如何做到这一点的例子在哪里?

    应用程序id(据我所知也称为客户机id)和添加到keys集合中的key的组合与服务主体有什么关系?

    [更新]

    this link about service principals

    如果我理解正确,我们不再讨论“应用程序密钥”,而是讨论“应用程序凭据”。我猜这是同一件事?

    以下段落让我对“应用程序凭据”、“登录凭据”和“服务主体凭据”之间的区别感到非常困惑:

    “若要使用服务主体登录,请将-service principal参数与connect-azurermaccount cmdlet一起使用。您还需要服务主体的应用程序ID、登录凭据和与服务主体关联的租户ID。要将服务主体的凭据作为适当的对象获取,请使用Get-Credential cmdlet。此cmdlet将显示一个对话框,以便在其中输入服务主体用户ID和密码。“

    [更新]

    从答案 to my question here 我可以使用以下应用程序设置运行HellokeyFault:

    vaulturl、authclientid和authcertthumbprint

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

    我只是想理解 https://docs.microsoft.com/en-gb/azure/key-vault/key-vault-get-started 在这个阶段。

    2 回复  |  直到 7 年前
        1
  •  1
  •   Martin Brandl    7 年前

    通常使用服务主体在像VSTS或POWER Script脚本这样的CID/CD环境中部署/管理资源。检查 Sign in with a service principal

        2
  •  0
  •   Kirsten    7 年前

    sample application here 在修复powershell脚本中的错误之后 reported here

    我能查到HellokeyFault的来源

     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获取令牌

    在这种情况下,猜测应用程序id是由authclientid提供的,而“要验证的密钥”是由authcertthumbprint提供的

    没有提到服务主体是必需的。