支持无状态令牌的OAuth 2.0 Python提供程序
oauth2-stateless的Python项目详细描述
#OAuth2 stateless
OAuth2 stateless是一个框架,其目的是使在应用程序堆栈中通过[OAuth 2.0]提供身份验证变得容易。
这个库的主要区别在于它的简单性和在没有任何数据库中只有"无状态"的标记,基于**jwt**[json web标记](https://en.wikipedia.org/wiki/json-web-u标记)。
[文档](http://oauth2 stateless.readthedocs.org/en/latest/index.html)
[特拉维斯建造状态][建造徽章][建造]
[![许可证](http://img.shields.io/badge/license mit brightgreen.svg)](许可证)
server
`` python
来自wsgiref.simple_server import make_server
import oauth2
import oauth2.grant
import oauth2.error
来自oauth2.store.memory import clientstore
来自oauth2.store.stateless import token store
importoauth2.tokengenerator
导入oauth2.web.wsgi
\oauth2.web.implicitgrantsiteadapter):
模板=''
<;html>;
<;正文>;
<;p>;
<;a href="{url}&;确认=确认">;确认<;/a>;
<;/p>;
<;p>;
<;p>;
<;a href="{url}&;deny=deny">;拒绝<;/a>;
<;/p>;
<;/body>;
<;/html>;'''
def身份验证(自我、请求、环境、作用域,客户端:
检查用户是否已授予访问权限
如果请求。post_param("confirm")="confirm":
返回{}
raise oauth2.error.usernotauthenticated
def render_auth页面(self、request、response、environ、scopes,客户端:
url=request.path+"?"+request.query_string
response.body=self.template.format(url=url)
return response
def user_has_denied_access(self,request):
return true
return false
创建内存存储以存储客户端应用程序。
client存储=client store()
重定向"uri=["http://localhost/callback"])
站点适配器=示例站点适配器()
=oauth2.tokengenerator.statelesttokengenerator(secret庘key='xxx')
token庘store=tokenstore(stateless)
provider=oauth2.provider(
access庘token庘store=token庘store,
auth庘code庘store=token store,
客户商店=客户商店,
令牌生成器=无状态令牌
)
刷新令牌功能并将访问令牌的过期时间设置为30天
provider.add_grant(oauth2.grant.refreshttoken(expires_))
app)
httpd.serve_Forever()
```
此示例仅显示如何实例化服务器。
由于缺少客户端应用程序,它不是一个有效的示例。
查看[示例](docs/examples/)目录。
或运行此示例:
``bash
pythondocs/examples/stateless_client_server.py
```
这已经是一个可行的示例。它们可以在没有数据库的情况下工作,因为OAuth令牌已经包含了所有必要的信息,如用户ID、授权类型、数据、作用域和客户端ID。
如果您想检查用户状态,如禁止、禁用等。
您可以从数据库的服务器站点上检查此参数。通过将此检查添加到
/api/me或重新定义oauth2.tokengenerator并添加特定逻辑。
这些存储后端是现成的:
-mongodb
-mysql
-redis
-memcached
-dynamodb
您可以轻松地添加后端实现。
还可以混合不同的后端,例如从MongoDB读取客户端的数据,同时将所有令牌保存在Memcached中以便快速访问。
查看项目。
OAuth2 stateless不定义如何识别用户或显示确认对话框。
相反,您的应用程序应该使用由"oauth2.web.siteadapter"定义的API。
[<;img alt="darkanthey" src="https://avatars2.githubusercontent.com/u/200977?v=3&s=117"width="117">;](https://github.com/darkanthey)
:——:
[darkanthey](https://github.com/darkanthey)
[build badge]:https://travis-ci.org/darkanthey/oauth2-stateless.svg?branch=master
[构建]:https://travis-ci.org/darkanthey/oauth2-stateless.svg?branch=master
[许可证徽章]:https://img.shields.io/badge/license-mit-blue.svg?style=flat
[许可证]:https://github.com/darkanthey/oauth2 stateless/blob/master/license
OAuth2 stateless是一个框架,其目的是使在应用程序堆栈中通过[OAuth 2.0]提供身份验证变得容易。
这个库的主要区别在于它的简单性和在没有任何数据库中只有"无状态"的标记,基于**jwt**[json web标记](https://en.wikipedia.org/wiki/json-web-u标记)。
[文档](http://oauth2 stateless.readthedocs.org/en/latest/index.html)
[特拉维斯建造状态][建造徽章][建造]
[![许可证](http://img.shields.io/badge/license mit brightgreen.svg)](许可证)
server
`` python
来自wsgiref.simple_server import make_server
import oauth2
import oauth2.grant
import oauth2.error
来自oauth2.store.memory import clientstore
来自oauth2.store.stateless import token store
importoauth2.tokengenerator
导入oauth2.web.wsgi
\oauth2.web.implicitgrantsiteadapter):
模板=''
<;html>;
<;正文>;
<;p>;
<;a href="{url}&;确认=确认">;确认<;/a>;
<;/p>;
<;p>;
<;p>;
<;a href="{url}&;deny=deny">;拒绝<;/a>;
<;/p>;
<;/body>;
<;/html>;'''
def身份验证(自我、请求、环境、作用域,客户端:
检查用户是否已授予访问权限
如果请求。post_param("confirm")="confirm":
返回{}
raise oauth2.error.usernotauthenticated
def render_auth页面(self、request、response、environ、scopes,客户端:
url=request.path+"?"+request.query_string
response.body=self.template.format(url=url)
return response
def user_has_denied_access(self,request):
return true
return false
创建内存存储以存储客户端应用程序。
client存储=client store()
重定向"uri=["http://localhost/callback"])
站点适配器=示例站点适配器()
=oauth2.tokengenerator.statelesttokengenerator(secret庘key='xxx')
token庘store=tokenstore(stateless)
provider=oauth2.provider(
access庘token庘store=token庘store,
auth庘code庘store=token store,
客户商店=客户商店,
令牌生成器=无状态令牌
)
刷新令牌功能并将访问令牌的过期时间设置为30天
provider.add_grant(oauth2.grant.refreshttoken(expires_))
app)
httpd.serve_Forever()
```
此示例仅显示如何实例化服务器。
由于缺少客户端应用程序,它不是一个有效的示例。
查看[示例](docs/examples/)目录。
或运行此示例:
``bash
pythondocs/examples/stateless_client_server.py
```
这已经是一个可行的示例。它们可以在没有数据库的情况下工作,因为OAuth令牌已经包含了所有必要的信息,如用户ID、授权类型、数据、作用域和客户端ID。
如果您想检查用户状态,如禁止、禁用等。
您可以从数据库的服务器站点上检查此参数。通过将此检查添加到
/api/me或重新定义oauth2.tokengenerator并添加特定逻辑。
这些存储后端是现成的:
-mongodb
-mysql
-redis
-memcached
-dynamodb
您可以轻松地添加后端实现。
还可以混合不同的后端,例如从MongoDB读取客户端的数据,同时将所有令牌保存在Memcached中以便快速访问。
查看项目。
OAuth2 stateless不定义如何识别用户或显示确认对话框。
相反,您的应用程序应该使用由"oauth2.web.siteadapter"定义的API。
[<;img alt="darkanthey" src="https://avatars2.githubusercontent.com/u/200977?v=3&s=117"width="117">;](https://github.com/darkanthey)
:——:
[darkanthey](https://github.com/darkanthey)
[build badge]:https://travis-ci.org/darkanthey/oauth2-stateless.svg?branch=master
[构建]:https://travis-ci.org/darkanthey/oauth2-stateless.svg?branch=master
[许可证徽章]:https://img.shields.io/badge/license-mit-blue.svg?style=flat
[许可证]:https://github.com/darkanthey/oauth2 stateless/blob/master/license