Использование токена MSAL для аутентификации в отношении базы данных Azure SQLPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Использование токена MSAL для аутентификации в отношении базы данных Azure SQL

Сообщение Anonymous »

У меня есть контейнер Docker на основе Python для запуска на Azure Kubernetes, и мне нужно подключиться к базе данных Azure SQL. Ранее я использовал пакет Adal для Python, но по соображениям безопасности мы хотим обновить MSAL и идентификацию пользователя вместо старого принципа службы и базового подхода Adal . Поскольку это приложение для запуска в одиночку, мы не хотим спрашивать или жесткий код каких-либо паролей.
Я могу получить токен с использованием объема на /.default для баз данных, но всякий раз, когда я пытаюсь подключиться к базе данных через pyodbc.conce , я получаю не удалось подключение к пользовательскому принципу Это код, который я использовал с рабочей настройкой на «Адал» в комментариях: < /p>

Код: Выделить всё

import pyodbc
import os
import struct
# import adal
import msal
from azure.keyvault.secrets import SecretClient
from azure.identity import DefaultAzureCredential

credential = DefaultAzureCredential()
client = SecretClient(vault_url=os.environ.get('AZURE_KEY_VAULT_URI'), credential=credential)

driver = client.get_secret('python-db-driver').value
server = client.get_secret('SqlServerName').value
database = client.get_secret('SqlDbName').value
service_principal_id = client.get_secret('MicroserviceSPId').value
service_principal_password = client.get_secret('MicroserviceSPKey').value

connection_string = f'Driver={driver};SERVER={server};DATABASE={database}'

authority_url = ("https://login.windows.net/" + os.environ['AZURE_TENANT_ID'])
resourceAppIdURI = "https://database.windows.net/"

# Working code using adal
# context = adal.AuthenticationContext(
#     authority_url, api_version=None
# )

context = msal.ConfidentialClientApplication(client_id=os.environ['AZURE_CLIENT_ID'],
client_credential=os.environ['AZURE_CLIENT_SECRET'], authority=authority_url)

# Working code using adal
# token = context.acquire_token_with_client_credentials(resourceAppIdURI,
#                                                       service_principal_id,
#                                                       service_principal_password)

token = context.acquire_token_for_client([resourceAppIdURI + "/.default"])

# get bytes from token obtained
tokenb = bytes(token["access_token"], "UTF-8")

# Working code using adal
# tokenb = bytes(token["accessToken"], "UTF-8")

exptoken = b''
for i in tokenb:
exptoken += bytes({i})
exptoken += bytes(1)
tokenstruct = struct.pack("=i", len(exptoken)) + exptoken

sql_conn = pyodbc.connect(connection_string, attrs_before={1256: tokenstruct})
Я получаю токен без каких -либо ошибок, но при настройке соединения с базой данных я получаю ошибку:

Я и тем же, как и то же самое, что и то же самое, так же, как и то же самое, что и то же самое. и я получаю активное соединение, позволяющее взаимодействовать с базой данных.

Подробнее здесь: https://stackoverflow.com/questions/797 ... l-database
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»