标签: rauth

如何在OAuth提供程序重定向后为用户提供JWT令牌?

我正在实施OAuth(使用rauth)并将提供JWT令牌(使用flask-jwt),javascript前端(Angular1).我已经完成了基于经典cookie /会话的应用程序.有用.现在我想用JWT令牌来做.

如果我理解正确,用户将被重定向到提供商(例如谷歌),登录帐户,我的服务器和提供商做魔术,然后提供商将用户重定向回我的页面.现在我获得了用户个人资料,结束了OAuth部分.通过正常会话,您可以为用户设置cookie以及其他用于设置会话的内容,然后将其重定向到主页.

这就是我被困住的地方.有什么好的做法如何在提供商发回给用户后给用户JWT令牌?在重定向到主页时将其作为cookie提供给用户?把它放在标题中?据我所知,我需要javascript将令牌保存到LocalStorage/SessionStorage.

oauth jwt rauth

8
推荐指数
1
解决办法
1215
查看次数

Google OAuth 令牌请求返回“invalid_client”:“未授权”

试图让 OAuth2 Google 登录工作,这是我的应用程序发出的原始请求:

方法: POST

网址: https://www.googleapis.com/oauth2/v3/token

标题: Content-Type: application/x-www-form-urlencoded

价值观:

client_idXXX-0123456789abcdef0123456789abcdef.apps.googleusercontent.com

client_secretA1b2C3d4E5f6G7h8I9j0K1l2M

code1/A1b2C3d4E5f6G7h8I9j0K1l2M3n4O5p6Q7r8S9t0U1v

grant_typeauthorization_code

redirect_urihttp://localhost:5000/callback/google/

这是回应:

地位: 401 Unauthorized

身体:

{
    "error": "invalid_client",
    "error_description": "Unauthorized"
}
Run Code Online (Sandbox Code Playgroud)

已验证这是我的应用程序正在制作的确切请求/响应(使用 Flask 和 rauth 的 Python 应用程序),并已验证我可以使用 Postman 重现完全相同的请求/响应。

根据其他线程中的说明,我在 Google API 控制台中完成了以下所有操作:

  • 在“OAuth 同意屏幕”设置中,将“产品名称”设置为与“项目名称”不同的内容
  • 同样在“OAuth 同意屏幕”设置中,仔细检查电子邮件是否已设置
  • 启用 Google+ API
  • 启用 Gmail API
  • 重新创建客户端 ID/秘密
  • 仔细检查客户端 ID/秘密值中是否没有前导或尾随空格,我已从 API 控制台正确复制它们

无论我做什么,仍然得到相同的响应"invalid_client": "Unauthorized"

对此的帮助将不胜感激。我正在尝试在我的应用程序中设置 OAuth2 驱动的“使用 X 登录”功能,已经让 Facebook 和 Twitter 正常工作,也想让 …

python oauth google-api google-oauth rauth

7
推荐指数
1
解决办法
1万
查看次数

用rauth重用OAuth1授权令牌

基于rauth示例中的脚本,我有一个twitter使用rauth(OAuth1)的客户端的以下实现:twitter-timeline-cli.py

from rauth.service import OAuth1Service

class TwitterClient:

    KNOWN_USERS = {
        'user1' : ("xxx", "yyy", "2342354"), # These should be real tokens
    }

    def __init__(self):
        # Get a real consumer key & secret from https://dev.twitter.com/apps/new
        self.twitter = OAuth1Service(
            name='twitter',
            consumer_key=TWITTER_CONSUMER_KEY,
            consumer_secret=TWITTER_CONSUMER_SECRET,
            request_token_url='https://api.twitter.com/oauth/request_token',
            access_token_url='https://api.twitter.com/oauth/access_token',
            authorize_url='https://api.twitter.com/oauth/authorize',
            base_url='https://api.twitter.com/1/')

    def authorize(self):
        request_token, request_token_secret = self.twitter.get_request_token()
        authorize_url = self.twitter.get_authorize_url(request_token)
        print 'Visit this URL in your browser: ' + authorize_url
        pin = raw_input('Enter PIN from browser: ')
        return …
Run Code Online (Sandbox Code Playgroud)

python oauth rauth

6
推荐指数
1
解决办法
2732
查看次数

当我尝试连接Box.com的API时,rauth2 Decoder无法处理access_token

这是我连接到Box的代码,但是我无法使用box_storage.get_auth_session(data = data).来自rauth import OAuth2Service

    box_storage = OAuth2Service(
                                name='Box',
                                client_id=CLIENT_ID,
                                client_secret=CLIENT_SECRET,
                                authorize_url='https://www.box.com/api/oauth2/authorize',
                                access_token_url='https://www.box.com/api/oauth2/token',
                                base_url='https://www.box.com/'
                                )

    redirect_uri = 'http://127.0.0.1'

    params = {          
              'redirect_uri': redirect_uri,
              'response_type': 'code',
              'state': 'good'          
              }
    url = box_storage.get_authorize_url(**params)

    data = {'code': 'foobar',
            'grant_type': 'authorization_code',
            'redirect_uri': redirect_uri}
    session = box_storage.get_auth_session(data=data)
Run Code Online (Sandbox Code Playgroud)

这是我得到的错误:

    Traceback (most recent call last):
      File "C:\Users\rushd\Documents\Aptana Studio 3 Workspace\practice\box.py", line 24, in <module>
        session = box_storage.get_auth_session(data=data)
      File "C:\Users\rushd\Envs\practice\lib\site-packages\rauth\service.py", line 533, in get_auth_session
        return self.get_session(self.get_access_token(method, **kwargs))
      File "C:\Users\rushd\Envs\practice\lib\site-packages\rauth\service.py", line 519, in get_access_token
        access_token, = process_token_request(r, decoder, key) …
Run Code Online (Sandbox Code Playgroud)

python rauth

6
推荐指数
1
解决办法
2288
查看次数

Rauth OAuth 1.0会话上的多个请求

我们使用Rauth连接到各种OAuth 1 API.它适用于单个请求,但尝试针对给定会话执行2个或更多请求会导致401未经API授权的错误.

Twitter API示例:

import requests
from rauth import OAuth1Service
from rauth import OAuth1Session

consumer_key = {the consumer key}
consumer_secret = {the consumer secret}
access_token = {the access token}
access_token_secret = {the access token secret}

oauth_service = OAuth1Service(consumer_key = consumer_key, 
                            consumer_secret = consumer_secret)
oauth_session = oauth_service.get_session(token = (access_token, access_secret))

url = 'https://api.twitter.com/1.1/statuses/home_timeline.json'
params = {'include_rts': 'true'}
r = oauth_session.get(url, params=params) # THIS WORKS
r = oauth_session.get(url, params=params) # THIS RETURNS 401 ERROR
Run Code Online (Sandbox Code Playgroud)

这种情况发生在Twitter和LinkedIn API上.我们如何针对单个OAuth1Session对象执行多个请求?

版本: …

python oauth rauth

5
推荐指数
1
解决办法
993
查看次数

在app引擎中使用rauth时出错(Permission denied)

我有一个应用程序引擎应用程序,使用oauth和rauth,我正在尝试使用Facebook,Twitter和谷歌登录.

当我在本地运行它工作,但在生产中我得到这个错误,但只有谷歌加,与Facebook工作正常.

('连接已中止.',错误(13,'权限被拒绝'))回溯(最近一次调用最后一次):文件"/base/data/home/runtimes/python27/python27_lib/versions/third_party/webapp2-2.5.2/ webapp2.py",第1535行,在调用 rv = self.handle_exception(request,response,e)文件"/base/data/home/runtimes/python27/python27_lib/versions/third_party/webapp2-2.5.2/webapp2.py ",第1529行,在调用 rv = self.router.dispatch(请求,响应)文件"/base/data/home/runtimes/python27/python27_lib/versions/third_party/webapp2-2.5.2/webapp2.py",行1278,在default_dispatcher中返回route.handler_adapter(请求,响应)文件"/base/data/home/runtimes/python27/python27_lib/versions/third_party/webapp2-2.5.2/webapp2.py",第1102行,在调用 返回处理程序中.dispatch()文件"/base/data/home/apps/s~app-getwell/login:1.379942143707124638/handler.py",第11行,在调度webapp2.RequestHandler.dispatch(self)文件"/ base/data/home/runtimes/python27/python27_lib/versions/third_party/webapp2-2.5.2/webapp2.py",第5行 72,在调度返回self.handle_exception(e,self.app.debug)文件"/base/data/home/runtimes/python27/python27_lib/versions/third_party/webapp2-2.5.2/webapp2.py",第570行, in dispatch return方法(*args,**kwargs)文件"/base/data/home/apps/s~app-getwell/login:1.379942143707124638/loginToken.py",第69行,in get ep = log.getTokenData(code )文件"/base/data/home/apps/s~app-getwell/login:1.379942143707124638/code/oauth/conect.py",第34行,在getTokenData session = self.getSession(conf,code)文件"/ base /data/home/apps/s~app-getwell/login:1.379942143707124638/code/oauth/conect.py",第61行,在getSession session = conf.get_auth_session(data = self.getData(code),decoder = json. load)文件"/base/data/home/apps/s~app-getwell/login:1.379942143707124638/code/oauth/rauth/service.py",第556行,get_auth_session session = self.get_session(self.get_access_token(method) ,**kwargs))文件"/base/data/home/apps/s~app-getwell/login:1.379942143707124638/code/oauth/rauth/service.py",第541行,在get_acc中 ess_token r = self.get_raw_access_token(method,**kwargs)get_raw_access_token中的文件"/base/data/home/apps/s~app-getwell/login:1.379942143707124638/code/oauth/rauth/service.py",第518行**kwargs)文件"/base/data/home/apps/s~app-getwell/login:1.379942143707124638/code/oauth/rauth/session.py",第358行,请求返回超级(OAuth2Session,self).request (方法,网址,**req_kwargs)文件"/base/data/home/apps/s~app-getwell/login:1.379942143707124638/code/oauth/rauth/requests/sessions.py",第457行,请求resp = self.send(prep,**send_kwargs)文件"/base/data/home/apps/s~app-getwell/login:1.379942143707124638/code/oauth/rauth/requests/sessions.py",第569行,发送r = adapter.send(request,**kwargs)file"/base/data/home/apps/s~app-getwell/login:1.379942143707124638/code/oauth/rauth/requests/adapters.py",第407行,发送引发ConnectionError(错误,请求=请求)ConnectionError :('连接已中止.',错误(13,'权限被拒绝'))

我启用了计费,并且在yaml中添加了ssl库(后期)

这是我进行oauth调用的代码

class login():    
    def __init__(self,tipo=tipoConexion.Google, redirect_uri =  'http://map.getwell.care/'):
        self.__tipo=tipo        
        self.config=config.data(redirect_uri)        

    def getAuthorizationURL(self):
        conf=self.getConfig()
        params=self.getParams()
        url = conf.get_authorize_url(**params)
        return url

    def getTokenData(self, code):
        ''' Get the …
Run Code Online (Sandbox Code Playgroud)

python google-app-engine oauth-2.0 google-plus rauth

5
推荐指数
0
解决办法
380
查看次数

从Bitbucket OAuth获得400

from rauth import OAuth1Service

OAUTH_REQUEST = "https://bitbucket.org/!api/1.0/oauth/request_token"
OAUTH_AUTH = "https://bitbucket.org/!api/1.0/oauth/authenticate"
OAUTH_ACCESS = "https://bitbucket.org/!api/1.0/oauth/access_token"

service = OAuth1Service(
           name='test',
           consumer_key='xxxxxxxxxxxxxx',
           consumer_secret='xxxxxxxxxxxxxxxxxxxx',
           request_token_url=OAUTH_REQUEST,
           access_token_url=OAUTH_ACCESS,
           authorize_url=OAUTH_AUTH)

resp = service.get_raw_request_token()
print resp
Run Code Online (Sandbox Code Playgroud)

我继续使用Bitbucket并生成一个消费者密钥对,但回复是400.任何想法是怎么回事?

我看了Bitbucket文档,网址是正确的.


编辑

感谢@maxcountryman在这里抽出时间.

我刚看了他的linklin示例代码:

import os
from rauth import OAuth1Service

OAUTH_REQUEST = "https://bitbucket.org/!api/1.0/oauth/request_token"
OAUTH_AUTH = "https://bitbucket.org/!api/1.0/oauth/authenticate"
OAUTH_ACCESS = "https://bitbucket.org/!api/1.0/oauth/access_token"

service = OAuth1Service(
           name='test',
           consumer_key='blah',
           consumer_secret='blah',
           request_token_url=OAUTH_REQUEST,
           access_token_url=OAUTH_ACCESS,
           authorize_url=OAUTH_AUTH)

# You can run python -m SimpleHTTPServer if you want a local callback
rtoken, rtoken_secret = service.get_request_token(params={'oauth_callback': 'http://localhost:8000'})

authorize_url = service.get_authorize_url(rtoken)
print …
Run Code Online (Sandbox Code Playgroud)

python oauth bitbucket rauth

3
推荐指数
1
解决办法
833
查看次数

如何使用Rauth python库刷新令牌?

我对Oauth的态度不是很强,所以需要一些帮助来实现我的FreeAgent会计系统的接口,它们提供了一个Oauth 2 API.

我想用标准Python编写代码,看起来最好的库是Rauth.我的问题是令人耳目一新的令牌.

有没有关于如何使用python Rauth库刷新过期令牌的好样本?什么是处理到期的最佳做法?我可以尝试使用我的令牌,如果因过期而出现错误请求刷新.或者也许我可以跟踪令牌的生命,如果我的计算表明它已经过期,那么请求另一个.哪里最好保存所有这些令牌信息:在配置文件中,在JSON对象中,到数据库......?

谢谢你的帮助.

格雷格

python oauth rauth

2
推荐指数
1
解决办法
1514
查看次数

rauth/flask:如何通过Twitter登录?

rauth中提供的示例是使用PIN而不是回调.我不明白这应该通过网络回调如何工作.

1)小问题:

根据twitter,如果oauth_callback传入了URL,则应该使用它来代替https://dev.twitter.com设置中的任何条目.然而,这似乎不是真的,如果我没有设置它,http://127.0.0.1:8080/twitter/authorized它将永远不会成功授权后到达该Url.

app.add_url_rule('/twitter/login', view_func=views.twitter_login)  
app.add_url_rule('/twitter/authorized', 'twitter_authorized', view_func=views.twitter_authorized)

def twitter_login():
    request_token, request_token_secret = twitter.get_request_token()
    redirect_uri = url_for('twitter_authorized', _external=True)
    params = {'oauth_callback': redirect_uri, 'request_token':request_token}
    return redirect(twitter.get_authorize_url(**params))
Run Code Online (Sandbox Code Playgroud)

2)主要问题在于:

我可以看到request.args有['oauth_token']['oauth_verifier'].但我不明白如何使用它们获取Twitter会话以获取用户详细信息,如图片和显示名称:

def twitter_authorized():
    tw_session = twitter.get_auth_session(request_token ??? , request_token_secret ???)
    resp = tw_session.get("account/verify_credentials.json", params={'format':'json'})    
    me = resp.json()
    user = User.get_or_create(...)

    if user:  
        login_user(user)            
    return redirect(url_for('index'))
Run Code Online (Sandbox Code Playgroud)

如果有人能够对此有所了解,我将非常感激.

flask twitter-oauth rauth

2
推荐指数
1
解决办法
2025
查看次数

创建会话时如何检测过期的访问令牌?

我有以下测试程序:

from   rauth.service import OAuth1Service, OAuth2Service

SUPPORTED_SERVICES = {
    'twitter'  : ( 'OAuth1', 'twitter',  'https://api.twitter.com/oauth',        'request_token', 'access_token', 'authorize', 'https://api.twitter.com/1/',  None),
    'facebook' : ( 'OAuth2', 'facebook', 'https://graph.facebook.com/oauth',     None,            'access_token', 'authorize', 'https://graph.facebook.com/', 'https://www.facebook.com/connect/login_success.html'),
    'google'   : ( 'OAuth2', 'google',   'https://accounts.google.com/o/oauth2', None,            'token',        'auth',      None,                          'http://localhost'),
}

CLIENT_DATA = {
    'twitter'  : ('dummy_client_id', 'dummy_client_secret'),
    'facebook' : ('dummy_client_id', 'dummy_client_secret'),
    'google'   : ('dummy_client_id', 'dummy_client_secret'),
}

USER_TOKENS = {
    'user1' : {
        'twitter'  : ('dummy_access_token', 'dummy_access_token_secret'),
        'facebook' : ('dummy_access_token', None),
        'google'   : ('dummy_access_token', None),
    }
}

def …
Run Code Online (Sandbox Code Playgroud)

python oauth rauth

1
推荐指数
1
解决办法
2万
查看次数