AzureAD/microsoft-authentication-extensions-for-python
GitHub: AzureAD/microsoft-authentication-extensions-for-python
微软官方Python库,为MSAL提供跨平台加密的Token缓存持久化存储能力。
Stars: 43 | Forks: 33
# Microsoft Authentication Extensions for Python
Microsoft Authentication Extensions for Python 提供了安全的机制,使客户端应用程序能够执行跨平台的 token cache 序列化和持久化。它为 [Microsoft Authentication Library for Python (MSAL)](https://github.com/AzureAD/microsoft-authentication-library-for-python) 提供了额外支持。
MSAL Python 默认支持内存缓存,并提供 [SerializableTokenCache](https://msal-python.readthedocs.io/en/latest/#msal.SerializableTokenCache) 来执行缓存序列化。您可以在 MSAL Python [文档](https://docs.microsoft.com/en-us/azure/active-directory/develop/msal-python-token-cache-serialization)中阅读更多相关信息。开发者需要在多个平台上实现自己的缓存持久化,而 Microsoft Authentication Extensions 使这一过程变得更加简单。
支持的平台包括 Windows、Mac 和 Linux。
- Windows - 使用 [DPAPI](https://docs.microsoft.com/en-us/dotnet/standard/security/how-to-use-data-protection) 进行加密。
- MAC - 使用 MAC KeyChain。
- Linux - 使用 [LibSecret](https://wiki.gnome.org/Projects/Libsecret) 进行加密。
## 安装
您可以在 [Pypi](https://pypi.org/project/msal-extensions/) 上找到 Microsoft Authentication Extensions for Python。
1. 如果您尚未安装,请将 Python 环境的 [pip 安装和/或升级](https://pip.pypa.io/en/stable/installing/)到最新版本。我们使用 pip 18.1 进行了测试。
2. 运行 `pip install msal-extensions`。
## 版本
该库遵循 [语义化版本控制](http://semver.org/)。
您可以在 [Releases](https://github.com/AzureAD/microsoft-authentication-extensions-for-python/releases) 中找到每个版本的更改。
## 用法
### 创建供 MSAL 使用的加密 token cache 文件
Microsoft Authentication Extensions 库提供了 `PersistedTokenCache`,它接受一个依赖于平台的持久化实例。然后可以使用此 token cache 来实例化 MSAL Python 中的 `PublicClientApplication`。
token cache 在内部包含文件锁和自动重载行为。
以下是适用于多个平台的此模式示例(摘自完整的[示例](https://github.com/AzureAD/microsoft-authentication-extensions-for-python/blob/dev/sample/token_cache_sample.py)):
```
def build_persistence(location, fallback_to_plaintext=False):
"""Build a suitable persistence instance based your current OS"""
try:
return build_encrypted_persistence(location)
except:
if not fallback_to_plaintext:
raise
logging.warning("Encryption unavailable. Opting in to plain text.")
return FilePersistence(location)
persistence = build_persistence("token_cache.bin")
print("Type of persistence: {}".format(persistence.__class__.__name__))
print("Is this persistence encrypted?", persistence.is_encrypted)
cache = PersistedTokenCache(persistence)
```
现在您可以在 MSAL 应用程序中像这样使用它:
```
app = msal.PublicClientApplication("my_client_id", token_cache=cache)
```
### 创建加密持久化文件以存储您自己的数据
以下是适用于多个平台的此模式示例(摘自完整的[示例](https://github.com/AzureAD/microsoft-authentication-extensions-for-python/blob/dev/sample/persistence_sample.py)):
```
def build_persistence(location, fallback_to_plaintext=False):
"""Build a suitable persistence instance based your current OS"""
try:
return build_encrypted_persistence(location)
except: # pylint: disable=bare-except
if not fallback_to_plaintext:
raise
logging.warning("Encryption unavailable. Opting in to plain text.")
return FilePersistence(location)
persistence = build_persistence("storage.bin", fallback_to_plaintext=False)
print("Type of persistence: {}".format(persistence.__class__.__name__))
print("Is this persistence encrypted?", persistence.is_encrypted)
data = { # It can be anything, here we demonstrate an arbitrary json object
"foo": "hello world",
"bar": "",
"service_principle_1": "blah blah...",
}
persistence.save(json.dumps(data))
assert json.loads(persistence.load()) == data
```
## Python 版本支持策略
若 Python 版本距离 [Python 软件基金会 (PSF) 定义的生命周期结束 (end-of-life)](https://devguide.python.org/versions/#versions) 已超过 6 个月,该库将不再为其提供新功能更新。
## 社区帮助与支持
我们利用 Stack Overflow 与社区合作支持 Azure Active Directory 及其 SDK(包括此 SDK)!
我们强烈建议您在 Stack Overflow 上提问(我们都在那里!)。
同时,请浏览现有问题,看看是否有人已经提出过您的问题。
我们建议您使用 “msal” 标签,以便我们能够看到它!
以下是 Stack Overflow 上关于 MSAL 的最新问答:
[http://stackoverflow.com/questions/tagged/msal](http://stackoverflow.com/questions/tagged/msal)
## 贡献
所有代码均根据 MIT 许可证授权,我们会在 GitHub 上积极进行分类管理。
本项目欢迎贡献和建议。大多数贡献要求您同意
贡献者许可协议 (CLA),声明您有权并且确实授予我们
使用您的贡献的权利。有关详细信息,请访问 https://cla.microsoft.com。
当您提交拉取请求时,CLA 机器人将自动确定您是否需要提供
CLA,并相应地标记 PR(例如,标签、评论)。只需按照机器人提供的
说明操作即可。对于所有使用我们 CLA 的仓库,您只需执行一次此操作。
## 我们重视并遵守 Microsoft 开源行为准则
本项目已采用 [Microsoft 开源行为准则](https://opensource.microsoft.com/codeofconduct/)。有关更多信息,请参阅[行为准则常见问题解答](https://opensource.microsoft.com/codeofconduct/faq/),或通过 [opencode@microsoft.com](mailto:opencode@microsoft.com) 联系我们以提出任何其他问题或意见。
标签:Azure AD, Credential Management, Linux LibSecret, Mac KeyChain, MSAL, OAuth2, Windows DPAPI, 令牌缓存, 安全存储, 微软认证, 操作系统检测, 数据加密, 数据持久化, 文件锁, 缓存序列化, 逆向工具