【问题标题】:How can I make MSAL4J and azure-security-keyvault-* work together?如何让 MSAL4J 和 azure-security-keyvault-* 协同工作?
【发布时间】:2023-02-01 08:23:36
【问题描述】:

我想使用 MSAL4J 和存储在 Azure Key Vault (AKV) 中的证书进行身份验证。该证书是自签名的 Azure Key Vault 证书。

我可以找到一个基于本地(文件系统)存储的证书和密钥的示例,而不是在 AKV 中创建和存储的证书。如何在 MSAL4J 中使用从azure-security-keyvault-* 获得的证书、密钥和秘密对象?

  1. 来自 azure-security-keyvault-keys 的密钥是 com.azure.security.keyvault.keys.models.KeyVaultKey,但 MSAL4J 需要 java.security.PrivateKey
  2. 如何应用从azure-security-keyvault-secrets获得的秘密解密私钥?

【问题讨论】:

    标签: java azure azure-keyvault msal azure-security


    【解决方案1】:

    你确定它受支持吗?据我所知,不支持基于证书的身份验证。 MSAL 使用公共客户端或机密客户端。

    但是,我确实在他们的维基上找到了这个:https://github.com/AzureAD/microsoft-authentication-library-for-java/wiki/Client-Credentials

    MSAL4J 中有两种类型的客户端机密:

    • 应用程序机密
    • 证书

    您需要实例化一个机密的客户端应用程序;如果你有证书:

    String PUBLIC_CLIENT_ID;
    String AUTHORITY;
    PrivateKey PRIVATE_KEY;  
    X509Certificate PUBLIC_KEY;
    
    IClientCredential credential = ClientCredentialFactory.createFromCertificate(PRIVATE_KEY, PUBLIC_KEY);
    ConfidentialClientApplication app = 
        ConfidentialClientApplication
            .builder(PUBLIC_CLIENT_ID, credential)
            .authority(AUTHORITY)
            .build();
    

    然后获取token:https://github.com/AzureAD/microsoft-authentication-library-for-java/wiki/Acquiring-Tokens#confidential-client-applications

    https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/lib/msal-node/src/client/ConfidentialClientApplication.ts
    您需要使用:acquireTokenByClientCredential https://azuread.github.io/microsoft-authentication-library-for-js/ref/classes/_azure_msal_node.confidentialclientapplication.html#acquiretokenbyclientcredential

    另见:

    【讨论】:

      猜你喜欢
      • 2020-01-17
      • 2017-11-15
      • 2020-01-13
      • 2014-11-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多