From cd288c910add53a830ebbf729fed5530ea89932d Mon Sep 17 00:00:00 2001 From: Hsiaoming Yang Date: Thu, 21 Nov 2013 11:44:35 +0800 Subject: [PATCH 01/19] Init commits. --- .gitignore | 2 ++ README.md | 5 +++++ 2 files changed, 7 insertions(+) create mode 100644 .gitignore create mode 100644 README.md diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..f40c3d8 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +*.sqlite +*.pyc diff --git a/README.md b/README.md new file mode 100644 index 0000000..770a540 --- /dev/null +++ b/README.md @@ -0,0 +1,5 @@ +# Example for OAuth 2 Server + +This is an example of OAuth 2 Server. + +Find more details on From d1e3b6de1982894b97a719b04d9f0161e5739074 Mon Sep 17 00:00:00 2001 From: Hsiaoming Yang Date: Thu, 21 Nov 2013 11:46:34 +0800 Subject: [PATCH 02/19] Setup basic server. --- app.py | 46 +++++++++++++++++++++++++++++++++++++++++++++ templates/home.html | 20 ++++++++++++++++++++ 2 files changed, 66 insertions(+) create mode 100644 app.py create mode 100644 templates/home.html diff --git a/app.py b/app.py new file mode 100644 index 0000000..05eded2 --- /dev/null +++ b/app.py @@ -0,0 +1,46 @@ +# coding: utf-8 + +from flask import Flask +from flask import session, request +from flask import render_template, redirect +from flask_sqlalchemy import SQLAlchemy + + +app = Flask(__name__, template_folder='templates') +app.debug = True +app.secret_key = 'secret' +app.config.update({ + 'SQLALCHEMY_DATABASE_URI': 'sqlite:///db.sqlite', +}) +db = SQLAlchemy(app) + + +class User(db.Model): + id = db.Column(db.Integer, primary_key=True) + username = db.Column(db.String(40), unique=True) + + +def current_user(): + if 'id' in session: + uid = session['id'] + return User.query.get(uid) + return None + + +@app.route('/', methods=('GET', 'POST')) +def home(): + if request.method == 'POST': + username = request.form.get('username') + user = User.query.filter_by(username=username).first() + if not user: + user = User(username=username) + db.session.add(user) + db.session.commit() + session['id'] = user.id + return redirect('/') + user = current_user() + return render_template('home.html', user=user) + +if __name__ == '__main__': + db.create_all() + app.run() diff --git a/templates/home.html b/templates/home.html new file mode 100644 index 0000000..d2cc058 --- /dev/null +++ b/templates/home.html @@ -0,0 +1,20 @@ + + + + + + + + {% if user %} +

You are {{ user.username }}

+ {% else %} +

You are not authenticated

+ {% endif %} + +

Type any username:

+
+ + +
+ + From 3f1c8f2f86b408be6105593c3206cad814dfcb73 Mon Sep 17 00:00:00 2001 From: Hsiaoming Yang Date: Thu, 21 Nov 2013 11:52:05 +0800 Subject: [PATCH 03/19] Add Client. --- app.py | 55 ++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 54 insertions(+), 1 deletion(-) diff --git a/app.py b/app.py index 05eded2..553a949 100644 --- a/app.py +++ b/app.py @@ -2,8 +2,9 @@ from flask import Flask from flask import session, request -from flask import render_template, redirect +from flask import render_template, redirect, jsonify from flask_sqlalchemy import SQLAlchemy +from werkzeug.security import gen_salt app = Flask(__name__, template_folder='templates') @@ -20,6 +21,37 @@ class User(db.Model): username = db.Column(db.String(40), unique=True) +class Client(db.Model): + client_id = db.Column(db.String(40), primary_key=True) + client_secret = db.Column(db.String(55), nullable=False) + + user_id = db.Column(db.ForeignKey('user.id')) + user = db.relationship('User') + + _redirect_uris = db.Column(db.Text) + _default_scopes = db.Column(db.Text) + + @property + def client_type(self): + return 'public' + + @property + def redirect_uris(self): + if self._redirect_uris: + return self._redirect_uris.split() + return [] + + @property + def default_redirect_uri(self): + return self.redirect_uris[0] + + @property + def default_scopes(self): + if self._default_scopes: + return self._default_scopes.split() + return [] + + def current_user(): if 'id' in session: uid = session['id'] @@ -41,6 +73,27 @@ def home(): user = current_user() return render_template('home.html', user=user) + +@app.route('/client') +def client(): + user = current_user() + if not user: + return redirect('/') + item = Client( + client_id=gen_salt(40), + client_secret=gen_salt(50), + _redirect_uris='http://localhost:8000/authorized', + _default_scopes='email', + user_id=user.id, + ) + db.session.add(item) + db.session.commit() + return jsonify( + client_id=item.client_id, + client_secret=item.client_secret, + ) + + if __name__ == '__main__': db.create_all() app.run() From 3b60b5d769b807b1549157f76cd46151dd3b8f1d Mon Sep 17 00:00:00 2001 From: Hsiaoming Yang Date: Thu, 21 Nov 2013 14:59:50 +0800 Subject: [PATCH 04/19] Create provider. --- app.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/app.py b/app.py index 553a949..daee627 100644 --- a/app.py +++ b/app.py @@ -5,6 +5,7 @@ from flask import render_template, redirect, jsonify from flask_sqlalchemy import SQLAlchemy from werkzeug.security import gen_salt +from flask_oauthlib.provider import OAuth2Provider app = Flask(__name__, template_folder='templates') @@ -14,6 +15,7 @@ 'SQLALCHEMY_DATABASE_URI': 'sqlite:///db.sqlite', }) db = SQLAlchemy(app) +oauth = OAuth2Provider(app) class User(db.Model): @@ -94,6 +96,10 @@ def client(): ) +@oauth.clientgetter +def load_client(client_id): + return Client.query.filter_by(client_id=client_id).first() + if __name__ == '__main__': db.create_all() app.run() From a10c376b6f48bfde52d5fa2d6a8c5cd50e3096e1 Mon Sep 17 00:00:00 2001 From: Hsiaoming Yang Date: Thu, 21 Nov 2013 15:03:59 +0800 Subject: [PATCH 05/19] Create Grant token. --- app.py | 57 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) diff --git a/app.py b/app.py index daee627..d74e722 100644 --- a/app.py +++ b/app.py @@ -1,5 +1,6 @@ # coding: utf-8 +from datetime import datetime, timedelta from flask import Flask from flask import session, request from flask import render_template, redirect, jsonify @@ -54,6 +55,39 @@ def default_scopes(self): return [] +class Grant(db.Model): + id = db.Column(db.Integer, primary_key=True) + + user_id = db.Column( + db.Integer, db.ForeignKey('user.id', ondelete='CASCADE') + ) + user = db.relationship('User') + + client_id = db.Column( + db.String(40), db.ForeignKey('client.client_id'), + nullable=False, + ) + client = db.relationship('Client') + + code = db.Column(db.String(255), index=True, nullable=False) + + redirect_uri = db.Column(db.String(255)) + expires = db.Column(db.DateTime) + + _scopes = db.Column(db.Text) + + def delete(self): + db.session.delete(self) + db.session.commit() + return self + + @property + def scopes(self): + if self._scopes: + return self._scopes.split() + return [] + + def current_user(): if 'id' in session: uid = session['id'] @@ -100,6 +134,29 @@ def client(): def load_client(client_id): return Client.query.filter_by(client_id=client_id).first() + +@oauth.grantgetter +def load_grant(client_id, code): + return Grant.query.filter_by(client_id=client_id, code=code).first() + + +@oauth.grantsetter +def save_grant(client_id, code, request, *args, **kwargs): + # decide the expires time yourself + expires = datetime.utcnow() + timedelta(seconds=100) + grant = Grant( + client_id=client_id, + code=code['code'], + redirect_uri=request.redirect_uri, + _scopes=' '.join(request.scopes), + user=current_user(), + expires=expires + ) + db.session.add(grant) + db.session.commit() + return grant + + if __name__ == '__main__': db.create_all() app.run() From ba1fd40293e673ae35180a1c10f95820c6a93d23 Mon Sep 17 00:00:00 2001 From: Hsiaoming Yang Date: Thu, 21 Nov 2013 15:07:05 +0800 Subject: [PATCH 06/19] Create Access Token. --- app.py | 57 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) diff --git a/app.py b/app.py index d74e722..5c98cab 100644 --- a/app.py +++ b/app.py @@ -88,6 +88,34 @@ def scopes(self): return [] +class Token(db.Model): + id = db.Column(db.Integer, primary_key=True) + client_id = db.Column( + db.String(40), db.ForeignKey('client.client_id'), + nullable=False, + ) + client = db.relationship('Client') + + user_id = db.Column( + db.Integer, db.ForeignKey('user.id') + ) + user = db.relationship('User') + + # currently only bearer is supported + token_type = db.Column(db.String(40)) + + access_token = db.Column(db.String(255), unique=True) + refresh_token = db.Column(db.String(255), unique=True) + expires = db.Column(db.DateTime) + _scopes = db.Column(db.Text) + + @property + def scopes(self): + if self._scopes: + return self._scopes.split() + return [] + + def current_user(): if 'id' in session: uid = session['id'] @@ -157,6 +185,35 @@ def save_grant(client_id, code, request, *args, **kwargs): return grant +@oauth.tokengetter +def load_token(access_token=None, refresh_token=None): + if access_token: + return Token.query.filter_by(access_token=access_token).first() + elif refresh_token: + return Token.query.filter_by(refresh_token=refresh_token).first() + + +@oauth.tokensetter +def save_token(token, request, *args, **kwargs): + toks = Token.query.filter_by( + client_id=request.client.client_id, + user_id=request.user.id + ).all() + # make sure that every client has only one token connected to a user + db.session.delete(toks) + + expires_in = token.pop('expires_in') + expires = datetime.utcnow() + timedelta(seconds=expires_in) + + tok = Token(**token) + tok.expires = expires + tok.client_id = request.client.client_id + tok.user_id = request.user.id + db.session.add(tok) + db.session.commit() + return tok + + if __name__ == '__main__': db.create_all() app.run() From cbc3e12a3123f4bbc9d68eb8438247357f213583 Mon Sep 17 00:00:00 2001 From: Hsiaoming Yang Date: Thu, 21 Nov 2013 15:24:38 +0800 Subject: [PATCH 07/19] Implement handlers. --- app.py | 23 +++++++++++++++++++++++ templates/authorize.html | 22 ++++++++++++++++++++++ 2 files changed, 45 insertions(+) create mode 100644 templates/authorize.html diff --git a/app.py b/app.py index 5c98cab..4f990de 100644 --- a/app.py +++ b/app.py @@ -214,6 +214,29 @@ def save_token(token, request, *args, **kwargs): return tok +@app.route('/oauth/token') +@oauth.token_handler +def access_token(): + return None + + +@app.route('/oauth/authorize', methods=['GET', 'POST']) +@oauth.authorize_handler +def authorize(*args, **kwargs): + user = current_user() + if not user: + return redirect('/') + if request.method == 'GET': + client_id = kwargs.get('client_id') + client = Client.query.filter_by(client_id=client_id).first() + kwargs['client'] = client + kwargs['user'] = user + return render_template('authorize.html', **kwargs) + + confirm = request.form.get('confirm', 'no') + return confirm == 'yes' + + if __name__ == '__main__': db.create_all() app.run() diff --git a/templates/authorize.html b/templates/authorize.html new file mode 100644 index 0000000..53bbc03 --- /dev/null +++ b/templates/authorize.html @@ -0,0 +1,22 @@ + + + + + Authorization + + +

Client: {{ client.client_id }}

+

User: {{ user.username }}

+
+

Allow access?

+ + + + {% if state %} + + {% endif %} + + +
+ + From 060da19663e006fab409b9e87639f8e00d3c8e22 Mon Sep 17 00:00:00 2001 From: Hsiaoming Yang Date: Thu, 21 Nov 2013 15:47:21 +0800 Subject: [PATCH 08/19] Add client and fix bugs in app.py --- app.py | 18 ++++++++++++------ client.py | 57 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 69 insertions(+), 6 deletions(-) create mode 100644 client.py diff --git a/app.py b/app.py index 4f990de..0dfa13e 100644 --- a/app.py +++ b/app.py @@ -198,17 +198,23 @@ def save_token(token, request, *args, **kwargs): toks = Token.query.filter_by( client_id=request.client.client_id, user_id=request.user.id - ).all() + ) # make sure that every client has only one token connected to a user - db.session.delete(toks) + for t in toks: + db.session.delete(t) expires_in = token.pop('expires_in') expires = datetime.utcnow() + timedelta(seconds=expires_in) - tok = Token(**token) - tok.expires = expires - tok.client_id = request.client.client_id - tok.user_id = request.user.id + tok = Token( + access_token=token['access_token'], + refresh_token=token['refresh_token'], + token_type=token['token_type'], + _scopes=token['scope'], + expires=expires, + client_id=request.client.client_id, + user_id=request.user.id, + ) db.session.add(tok) db.session.commit() return tok diff --git a/client.py b/client.py new file mode 100644 index 0000000..bdef760 --- /dev/null +++ b/client.py @@ -0,0 +1,57 @@ +from flask import Flask, url_for, session, request, jsonify +from flask_oauthlib.client import OAuth + + +CLIENT_ID = 'GbRmKgbSMmlE2NlugMeFfQIba8hoVyBFsWS8Igsq' +CLIENT_SECRET = 'BfP7jsN8dSsXjGLfTTPiEvarMJOpkZQ2Y7IVVee8X929LfolMV' + + +app = Flask(__name__) +app.debug = True +app.secret_key = 'secret' +oauth = OAuth(app) + +remote = oauth.remote_app( + 'remote', + consumer_key=CLIENT_ID, + consumer_secret=CLIENT_SECRET, + request_token_params={'scope': 'email'}, + base_url='http://127.0.0.1:5000/api/', + request_token_url=None, + access_token_url='http://127.0.0.1:5000/oauth/token', + authorize_url='http://127.0.0.1:5000/oauth/authorize' +) + + +@app.route('/') +def index(): + if 'remote_oauth' in session: + return session['remote_oauth'][0] + next_url = request.args.get('next') or request.referrer or None + return remote.authorize( + callback=url_for('authorized', next=next_url, _external=True) + ) + + +@app.route('/authorized') +@remote.authorized_handler +def authorized(resp): + if resp is None: + return 'Access denied: reason=%s error=%s' % ( + request.args['error_reason'], + request.args['error_description'] + ) + print resp + session['remote_oauth'] = (resp['access_token'], '') + return jsonify(oauth_token=resp['access_token']) + + +@remote.tokengetter +def get_oauth_token(): + return session.get('remote_oauth') + + +if __name__ == '__main__': + import os + os.environ['DEBUG'] = 'true' + app.run(host='localhost', port=8000) From b30339ee5df40ef75e3313587aff11d0ec67339e Mon Sep 17 00:00:00 2001 From: Hsiaoming Yang Date: Thu, 21 Nov 2013 15:49:17 +0800 Subject: [PATCH 09/19] Add API me. Demo works. --- app.py | 7 +++++++ client.py | 3 ++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/app.py b/app.py index 0dfa13e..f16bc2e 100644 --- a/app.py +++ b/app.py @@ -243,6 +243,13 @@ def authorize(*args, **kwargs): return confirm == 'yes' +@app.route('/api/me') +@oauth.require_oauth() +def me(req): + user = req.user + return jsonify(username=user.username) + + if __name__ == '__main__': db.create_all() app.run() diff --git a/client.py b/client.py index bdef760..9ad18f9 100644 --- a/client.py +++ b/client.py @@ -26,7 +26,8 @@ @app.route('/') def index(): if 'remote_oauth' in session: - return session['remote_oauth'][0] + resp = remote.get('me') + return jsonify(resp.data) next_url = request.args.get('next') or request.referrer or None return remote.authorize( callback=url_for('authorized', next=next_url, _external=True) From b62681e87dc04b0da07155092a3e698ddcd2a7dc Mon Sep 17 00:00:00 2001 From: Ale Date: Mon, 6 Jan 2014 21:14:55 +0300 Subject: [PATCH 10/19] Close #1 --- app.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/app.py b/app.py index f16bc2e..1572711 100644 --- a/app.py +++ b/app.py @@ -146,7 +146,12 @@ def client(): item = Client( client_id=gen_salt(40), client_secret=gen_salt(50), - _redirect_uris='http://localhost:8000/authorized', + _redirect_uris=' '.join([ + 'http://localhost:8000/authorized', + 'http://127.0.0.1:8000/authorized', + 'http://127.0.1:8000/authorized', + 'http://127.1:8000/authorized', + ]), _default_scopes='email', user_id=user.id, ) From a5e4d63a7c3082a1567f76b04af4f28aa8d39735 Mon Sep 17 00:00:00 2001 From: Bruno Agutoli Date: Fri, 2 May 2014 23:10:20 -0300 Subject: [PATCH 11/19] adding the installation process --- README.md | 4 ++++ requirements.txt | 4 ++++ 2 files changed, 8 insertions(+) create mode 100644 requirements.txt diff --git a/README.md b/README.md index 770a540..4fe8772 100644 --- a/README.md +++ b/README.md @@ -3,3 +3,7 @@ This is an example of OAuth 2 Server. Find more details on + +# INSTALLATION + +$ pip install -r requirements.txt diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..7e0fdab --- /dev/null +++ b/requirements.txt @@ -0,0 +1,4 @@ +Flask==0.10.1 +Flask-SQLAlchemy==1.0 +werkzeug==0.9.4 +Flask-OAuthlib==0.4.3 From 414fee677e3be4d237ca90b918f18b5d655db6d6 Mon Sep 17 00:00:00 2001 From: ratazzi Date: Tue, 24 Jun 2014 22:02:41 +0800 Subject: [PATCH 12/19] add environment variable OAUTHLIB_INSECURE_TRANSPORT for debug --- client.py | 1 + 1 file changed, 1 insertion(+) diff --git a/client.py b/client.py index 9ad18f9..2bc9baf 100644 --- a/client.py +++ b/client.py @@ -55,4 +55,5 @@ def get_oauth_token(): if __name__ == '__main__': import os os.environ['DEBUG'] = 'true' + os.environ['OAUTHLIB_INSECURE_TRANSPORT'] = 'true' app.run(host='localhost', port=8000) From a7b2b02363d3ddddbb6a7b60bf6d67c095e93f54 Mon Sep 17 00:00:00 2001 From: Mathijs de Bruin Date: Tue, 1 Jul 2014 16:50:59 +0200 Subject: [PATCH 13/19] Fix problem with /api/me call. --- app.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app.py b/app.py index f16bc2e..60a882a 100644 --- a/app.py +++ b/app.py @@ -245,8 +245,8 @@ def authorize(*args, **kwargs): @app.route('/api/me') @oauth.require_oauth() -def me(req): - user = req.user +def me(): + user = request.oauth.user return jsonify(username=user.username) From 09c32e132e7e0d4f2f3009f6fd26fb8aa3e049cc Mon Sep 17 00:00:00 2001 From: Hsiaoming Yang Date: Fri, 18 Jul 2014 16:58:00 +0800 Subject: [PATCH 14/19] Update dependency for Flask-OAuthlib --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 7e0fdab..8496606 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,4 +1,4 @@ Flask==0.10.1 Flask-SQLAlchemy==1.0 werkzeug==0.9.4 -Flask-OAuthlib==0.4.3 +Flask-OAuthlib=>0.5.0 From bef86d93d6386b79028167fd5f992b96835fa319 Mon Sep 17 00:00:00 2001 From: blurrcat Date: Wed, 13 Aug 2014 09:55:58 +0800 Subject: [PATCH 15/19] fix typo in requirements --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 8496606..6dca7dc 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,4 +1,4 @@ Flask==0.10.1 Flask-SQLAlchemy==1.0 werkzeug==0.9.4 -Flask-OAuthlib=>0.5.0 +Flask-OAuthlib>=0.5.0 From 99db3b9f8f282ff9a26511c996c0414003f96c1b Mon Sep 17 00:00:00 2001 From: Paolo Dina Date: Mon, 1 Sep 2014 09:33:20 +0200 Subject: [PATCH 16/19] Prefer authorized_response instead of @authorized_handler. Updated to reflect https://github.com/lepture/flask-oauthlib/commit/80a6082f4ee1e2def5ffafba1ec3bde521259c7c --- client.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/client.py b/client.py index 2bc9baf..4e4aca9 100644 --- a/client.py +++ b/client.py @@ -35,8 +35,8 @@ def index(): @app.route('/authorized') -@remote.authorized_handler -def authorized(resp): +def authorized(): + resp = remote.authorized_response() if resp is None: return 'Access denied: reason=%s error=%s' % ( request.args['error_reason'], From 94bf2b06bb6ff67cdaf3f02fb3bc87fca3d363bc Mon Sep 17 00:00:00 2001 From: think Date: Tue, 13 Jan 2015 11:01:54 +0800 Subject: [PATCH 17/19] redirect_uri error --- templates/authorize.html | 1 + 1 file changed, 1 insertion(+) diff --git a/templates/authorize.html b/templates/authorize.html index 53bbc03..b9d8f0a 100644 --- a/templates/authorize.html +++ b/templates/authorize.html @@ -12,6 +12,7 @@ + {% if state %} {% endif %} From e647be2c185be5e1318beee3be43c6ae250f6fb5 Mon Sep 17 00:00:00 2001 From: Ashish Arora Date: Mon, 20 Apr 2015 19:38:23 +0530 Subject: [PATCH 18/19] Added methods allowed to post requests --- app.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app.py b/app.py index 9ab6a89..4b51b16 100644 --- a/app.py +++ b/app.py @@ -225,7 +225,7 @@ def save_token(token, request, *args, **kwargs): return tok -@app.route('/oauth/token') +@app.route('/oauth/token', methods=['GET', 'POST']) @oauth.token_handler def access_token(): return None From a26e79178133219cb4c96979362b69dc6e5a8002 Mon Sep 17 00:00:00 2001 From: Andrei Sura Date: Fri, 15 Apr 2016 11:11:12 -0400 Subject: [PATCH 19/19] Update README with screenshots so it is clear how to test the code. + use `print()` in client.py for py3 compatibility --- .gitignore | 1 + README.md | 39 +++++++++++++++++++++++-- client.py | 2 +- img/00_oauth_server_form.png | Bin 0 -> 16801 bytes img/01_oauth_server.png | Bin 0 -> 24031 bytes img/02_oauth_client.png | Bin 0 -> 42455 bytes img/03_oauth_client_authorized.png | Bin 0 -> 21249 bytes img/04_oauth_client_retrieves_data.png | Bin 0 -> 11096 bytes 8 files changed, 39 insertions(+), 3 deletions(-) create mode 100644 img/00_oauth_server_form.png create mode 100644 img/01_oauth_server.png create mode 100644 img/02_oauth_client.png create mode 100644 img/03_oauth_client_authorized.png create mode 100644 img/04_oauth_client_retrieves_data.png diff --git a/.gitignore b/.gitignore index f40c3d8..b7b7c08 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ *.sqlite *.pyc +.ropeproject/ diff --git a/README.md b/README.md index 4fe8772..9bae937 100644 --- a/README.md +++ b/README.md @@ -4,6 +4,41 @@ This is an example of OAuth 2 Server. Find more details on -# INSTALLATION +# Installation -$ pip install -r requirements.txt + $ pip install -r requirements.txt + +# Usage + +1. Start your provider server with: + + $ python app.py + +2. Visit [http://127.0.0.1:5000/](http://127.0.0.1:5000/) and fill a username. + + [![00_oauth_server_form.png](img/00_oauth_server_form.png)]() + +3. And then visit [http://127.0.0.1:5000/client](http://127.0.0.1:5000/client) + + [![01_oauth_server.png](img/01_oauth_server.png)]() + +4. Take the client key and client secret, and modify our [client.py](client.py) +script with the key and secret. +Specifically update `CLIENT_ID` and `CLIENT_SECRET` variables on lines 5-6. + +5. Start the client server with: + + $ python client.py + + +6. Visit [http://localhost:8000](http://localhost:8000), everything should work +correctly. We will be redirected to a confirm page, if we choose yes, client +will obtain a pair of access token and secret. + + [![02_oauth_client.png](img/02_oauth_client.png)]() + [![03_oauth_client_authorized.png](img/03_oauth_client_authorized.png)]() + +7. Finally, if you visit [http://localhost:8000](http://localhost:8000) +you can access the authorized data: + + [![04_oauth_client_retrieves_data.png](img/04_oauth_client_retrieves_data.png)]() diff --git a/client.py b/client.py index 4e4aca9..263b71b 100644 --- a/client.py +++ b/client.py @@ -42,7 +42,7 @@ def authorized(): request.args['error_reason'], request.args['error_description'] ) - print resp + print(resp) session['remote_oauth'] = (resp['access_token'], '') return jsonify(oauth_token=resp['access_token']) diff --git a/img/00_oauth_server_form.png b/img/00_oauth_server_form.png new file mode 100644 index 0000000000000000000000000000000000000000..c0c0c38d91cee5b27dafffe93549eb3a4faa8921 GIT binary patch literal 16801 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 AQ~&?~ literal 0 HcmV?d00001 diff --git a/img/02_oauth_client.png b/img/02_oauth_client.png new file mode 100644 index 0000000000000000000000000000000000000000..0eaa439517614ca4084d5e7f0fca746179935ed6 GIT binary patch literal 42455 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 Uy-p|w4PgBYbiq0$+KwUr0kDg~X#fBK literal 0 HcmV?d00001 diff --git a/img/03_oauth_client_authorized.png b/img/03_oauth_client_authorized.png new file mode 100644 index 0000000000000000000000000000000000000000..19c961187f7642981f970a7f6d91ca38098626e1 GIT binary patch literal 21249 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%0Ab6Rn;szfF+eOamHbUWr@ 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 literal 0 HcmV?d00001