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"))