no-image

ValueError: Public Client should not possess credentials

python で AzureAD の認証をする際 msal を使うことが多いが、

PublicClientApplicationクラスに証明書を渡すと、

ValueError: Public Client should not possess credentials というエラーになる。

対処法として ConfidentialClientApplication クラスを使うことで回避できる。

PublicClientApplicationクラスはパブリッククライアントを表し、アプリケーション自体が認証されることはないため、証明書の提供はサポートされていない。

証明書ベースの認証には、ConfidentialClientApplicationクラスを使用する必要がある。

このクラスは機密クライアントを表し、アプリケーション自体が認証されるため、証明書の提供が必要となるという理由

以下、サンプルコード

from msal import ConfidentialClientApplication

client_id = 'YOUR_CLIENT_ID'
tenant_id = 'YOUR_TENANT_ID'
client_secret = 'YOUR_CLIENT_SECRET'
authority = f'https://login.microsoftonline.com/{tenant_id}'

app = ConfidentialClientApplication(
    client_id=client_id,
    client_credential=client_secret,
    authority=authority
)

result = None
result = app.acquire_token_for_client(scopes=["https://graph.microsoft.com/.default"])

if "access_token" in result:
    print(result['access_token'])
else:
    print(result.get("error"))
    print(result.get("error_description"))
    print(result.get("correlation_id"))