autogen_ext.auth.azure 源代码
from typing import List
from autogen_core import Component, ComponentBase
from pydantic import BaseModel
from typing_extensions import Self
from azure.core.credentials import TokenProvider
from azure.identity import DefaultAzureCredential, get_bearer_token_provider
[文档]
class TokenProviderConfig(BaseModel):
provider_kind: str
scopes: List[str]
[文档]
class AzureTokenProvider(ComponentBase[TokenProviderConfig], Component[TokenProviderConfig]):
component_type = "token_provider"
component_config_schema = TokenProviderConfig
component_provider_override = "autogen_ext.auth.azure.AzureTokenProvider"
def __init__(self, credential: TokenProvider, *scopes: str):
self.credential = credential
self.scopes = list(scopes)
self.provider = get_bearer_token_provider(self.credential, *self.scopes)
def __call__(self) -> str:
return self.provider()
def _to_config(self) -> TokenProviderConfig:
"""转储用于创建与当前实例配置匹配的组件新实例所需的配置。
Returns:
T: 该组件的配置信息。
"""
if isinstance(self.credential, DefaultAzureCredential):
# NOTE: we are not currently inspecting the chained credentials, so this could result in a loss of information
return TokenProviderConfig(provider_kind="DefaultAzureCredential", scopes=self.scopes)
else:
raise ValueError("Only DefaultAzureCredential is supported")
@classmethod
def _from_config(cls, config: TokenProviderConfig) -> Self:
"""根据配置对象创建组件的新实例。
Args:
config (T): 配置对象。
Returns:
Self: 组件的新实例。
"""
if config.provider_kind == "DefaultAzureCredential":
return cls(DefaultAzureCredential(), *config.scopes)
else:
raise ValueError("Only DefaultAzureCredential is supported")