This repository has been archived on 2023-02-21. You can view files and clone it, but cannot push or open issues or pull requests.
pyoidc-ozwillo/tests/test_oic_provider.py

740 lines
23 KiB
Python
Raw Normal View History

2014-11-12 15:12:47 +01:00
import json
import os
2014-11-12 15:12:47 +01:00
from time import sleep
2013-03-31 17:41:22 +02:00
from mako.lookup import TemplateLookup
2013-12-02 14:42:36 +01:00
from oic.oauth2 import rndstr
2013-09-23 12:08:42 +02:00
from oic.utils.authn.authn_context import AuthnBroker
2013-05-01 09:08:21 +02:00
from oic.utils.authn.client import verify_client
from oic.utils.authn.user import UserAuthnMethod
2013-03-31 17:41:22 +02:00
from oic.utils.authz import AuthzHandling
2014-11-24 10:48:53 +01:00
from oic.utils.http_util import Response
2013-03-31 17:41:22 +02:00
from oic.utils.userinfo import UserInfo
2014-01-22 14:49:46 +01:00
from oic.exception import RedirectURIError
2014-11-12 15:12:47 +01:00
from oic.utils.keyio import KeyBundle, ec_init
from oic.utils.keyio import KeyJar
from oic.utils.keyio import keybundle_from_local_file
from oic.oic.message import AuthorizationRequest
from oic.oic.message import RegistrationResponse
from oic.oic.message import OpenIDSchema
from oic.oic.message import AccessTokenResponse
from oic.oic.message import AccessTokenRequest
from oic.oic.message import TokenErrorResponse
from oic.oic.message import AuthorizationResponse
from oic.oic.message import UserInfoRequest
from oic.oic.message import CheckSessionRequest
from oic.oic.message import RegistrationRequest
from oic.oic.message import IdToken
2014-11-24 10:48:53 +01:00
from oic.utils.sdb import SessionDB, AuthnEvent
2012-10-03 21:30:40 +02:00
from oic.oic import Client
from oic.oic import make_openid_request
from oic.oic.consumer import Consumer
from oic.oic.provider import Provider
2012-10-03 21:30:40 +02:00
from oic.utils.time_util import epoch_in_a_while
from utils_for_tests import _eq
2013-12-02 14:42:36 +01:00
__author__ = 'rohe0002'
CLIENT_CONFIG = {
"client_id": "number5",
"ca_certs": "/usr/local/etc/oic/ca_certs.txt",
}
CONSUMER_CONFIG = {
"authz_page": "/authz",
#"password": args.passwd,
"scope": ["openid"],
"response_type": ["code"],
#"expire_in": 600,
"user_info": {
2013-05-28 16:02:12 +02:00
"name": None,
"email": None,
"nickname": None
},
"request_method": "param"
}
SERVER_INFO = {
"version": "3.0",
"issuer": "https://connect-op.heroku.com",
"authorization_endpoint": "http://localhost:8088/authorization",
"token_endpoint": "http://localhost:8088/token",
#"userinfo_endpoint":"http://localhost:8088/user_info",
#"check_id_endpoint":"http://localhost:8088/id_token",
#"registration_endpoint":"https://connect-op.heroku.com/connect/client",
#"scopes_supported":["openid","profile","email","address","PPID"],
"flows_supported": ["code", "token", "code token"],
#"identifiers_supported":["public","ppid"],
#"x509_url":"https://connect-op.heroku.com/cert.pem"
}
BASE_PATH = os.path.dirname(os.path.abspath(__file__))
CLIENT_SECRET = "abcdefghijklmnop"
CLIENT_ID = "client_1"
KC_SYM = KeyBundle([{"kty": "oct", "key": CLIENT_SECRET, "use": "ver"},
{"kty": "oct", "key": CLIENT_SECRET, "use": "sig"}])
KC_SYM2 = KeyBundle([{"kty": "oct", "key": "drickyoughurt", "use": "sig"},
{"kty": "oct", "key": "drickyoughurt", "use": "ver"}])
KC_RSA = keybundle_from_local_file("%s/rsa.key" % BASE_PATH,
"RSA", ["ver", "sig"])
KEYJAR = KeyJar()
KEYJAR[CLIENT_ID] = [KC_SYM, KC_RSA]
KEYJAR["number5"] = [KC_SYM2, KC_RSA]
KEYJAR[""] = KC_RSA
CDB = {
"number5": {
"password": "hemligt",
"client_secret": "drickyoughurt",
#"jwk_key": CONSUMER_CONFIG["key"],
2012-09-06 19:10:16 +02:00
"redirect_uris": [("http://localhost:8087/authz", None)],
},
"a1b2c3": {
"redirect_uris": [("http://localhost:8087/authz", None)]
},
"client0": {
"redirect_uris": [("http://www.example.org/authz", None)]
},
CLIENT_ID: {
"client_secret": CLIENT_SECRET,
2014-11-24 10:48:53 +01:00
"redirect_uris": [("http://localhost:8087/authz", None)]
}
}
USERDB = {
"user": {
"name": "Hans Granberg",
"nickname": "Hasse",
"email": "hans@example.org",
"verified": False,
2013-01-01 16:51:52 +01:00
"sub": "user"
2013-03-31 17:41:22 +02:00
},
"username": {
"name": "Linda Lindgren",
"nickname": "Linda",
"email": "linda@example.com",
"verified": True,
"sub": "username"
}
}
URLMAP = {CLIENT_ID: ["https://example.com/authz"]}
2013-03-31 17:41:22 +02:00
PASSWD = {"user": "password"}
ROOT = '../oc3/'
tl = TemplateLookup(directories=[ROOT + 'templates', ROOT + 'htdocs'],
module_directory=ROOT + 'modules',
input_encoding='utf-8', output_encoding='utf-8')
class DummyAuthn(UserAuthnMethod):
def __init__(self, srv, user):
UserAuthnMethod.__init__(self, srv)
self.user = user
2013-05-01 09:08:21 +02:00
def authenticated_as(self, cookie=None, **kwargs):
2014-11-24 10:48:53 +01:00
if cookie == "FAIL":
return None
else:
return {"uid": self.user}
2013-03-31 17:41:22 +02:00
#AUTHN = UsernamePasswordMako(None, "login.mako", tl, PASSWD, "authenticated")
2013-09-23 12:08:42 +02:00
AUTHN_BROKER = AuthnBroker()
2013-12-02 14:42:36 +01:00
AUTHN_BROKER.add("UNDEFINED", DummyAuthn(None, "username"))
2013-03-31 17:41:22 +02:00
# dealing with authorization
AUTHZ = AuthzHandling()
2013-12-02 14:42:36 +01:00
SYMKEY = rndstr(16) # symmetric key used to encrypt cookie info
2013-03-31 17:41:22 +02:00
USERINFO = UserInfo(USERDB)
2014-11-24 10:48:53 +01:00
provider_init = Provider("pyoicserv", SessionDB(SERVER_INFO["issuer"]), CDB,
AUTHN_BROKER, USERINFO,
2013-03-31 17:41:22 +02:00
AUTHZ, verify_client, SYMKEY, urlmap=URLMAP,
keyjar=KEYJAR)
def test_server_init():
server = provider_init
assert server
2013-09-23 12:08:42 +02:00
assert server.authn_broker == AUTHN_BROKER
2013-03-31 17:41:22 +02:00
print server.urlmap
assert server.urlmap["client_1"] == ["https://example.com/authz"]
def test_server_authorization_endpoint():
server = provider_init
bib = {"scope": ["openid"],
"state": "id-6da9ca0cc23959f5f33e8becd9b08cae",
"redirect_uri": "http://localhost:8087/authz",
"response_type": ["code"],
"client_id": "a1b2c3",
"nonce": "Nonce"}
arq = AuthorizationRequest(**bib)
2013-03-31 17:41:22 +02:00
resp = server.authorization_endpoint(request=arq.to_urlencoded())
print resp.message
assert resp.message
2013-03-31 17:41:22 +02:00
def test_server_authorization_endpoint_request():
server = provider_init
bib = {"scope": ["openid"],
"state": "id-6da9ca0cc23959f5f33e8becd9b08cae",
"redirect_uri": "http://localhost:8087/authz",
"response_type": ["code", "id_token"],
"client_id": "a1b2c3",
"nonce": "Nonce",
"prompt": ["none"]}
req = AuthorizationRequest(**bib)
2013-05-28 16:02:12 +02:00
# want to be someone else !
ic = {"sub": {"value": "userX"}}
_keys = server.keyjar.get_signing_key(key_type="RSA")
2012-09-13 13:01:40 +02:00
req["request"] = make_openid_request(req, _keys, idtoken_claims=ic,
algorithm="RS256")
2013-03-31 17:41:22 +02:00
resp = server.authorization_endpoint(request=req.to_urlencoded())
print resp
assert "error=login_required" in resp.message
def test_server_authorization_endpoint_id_token():
provider = provider_init
bib = {"scope": ["openid"],
"state": "id-6da9ca0cc23959f5f33e8becd9b08cae",
"redirect_uri": "http://localhost:8087/authz",
"response_type": ["code", "id_token"],
"client_id": "a1b2c3",
"nonce": "Nonce",
"prompt": ["none"]}
req = AuthorizationRequest(**bib)
AREQ = AuthorizationRequest(response_type="code",
client_id="client_1",
redirect_uri="http://example.com/authz",
scope=["openid"], state="state000")
2014-11-24 10:48:53 +01:00
sdb = provider.sdb
ae = AuthnEvent("userX")
sid = sdb.create_authz_session(ae, AREQ)
sdb.do_sub(sid)
_info = sdb[sid]
2014-11-24 10:48:53 +01:00
# All this is jut removed when the id_token is constructed
# The proper information comes from the session information
2013-01-01 16:51:52 +01:00
_user_info = IdToken(iss="https://foo.example.om", sub="foo",
2012-09-06 19:10:16 +02:00
aud=bib["client_id"], exp=epoch_in_a_while(minutes=10),
acr="2", nonce=bib["nonce"])
print provider.keyjar.issuer_keys
2012-09-06 19:10:16 +02:00
print _user_info.to_dict()
idt = provider.id_token_as_signed_jwt(_info, access_token="access_token",
user_info=_user_info)
req["id_token"] = idt
2014-11-24 10:48:53 +01:00
query_string = req.to_urlencoded()
2014-11-24 10:48:53 +01:00
# client_id not in id_token["aud"] so login required
resp = provider.authorization_endpoint(request=query_string, cookie="FAIL")
print resp
assert "error=login_required" in resp.message
2014-11-24 10:48:53 +01:00
req["client_id"] = "client_1"
query_string = req.to_urlencoded()
# client_id is in id_token["aud"] so no login required
resp = provider.authorization_endpoint(request=query_string, cookie="FAIL")
print resp.message
assert resp.message.startswith("http://localhost:8087/authz")
def test_server_authenticated():
server = provider_init
_session_db = {}
cons = Consumer(_session_db, CONSUMER_CONFIG, CLIENT_CONFIG,
server_info=SERVER_INFO, )
cons.debug = True
cons.keyjar[""] = KC_RSA
2014-10-01 11:37:06 +02:00
_state, location = cons.begin("openid", "code",
path="http://localhost:8087")
QUERY_STRING = location.split("?")[1]
print QUERY_STRING
2013-03-31 17:41:22 +02:00
resp = server.authorization_endpoint(request=QUERY_STRING)
print resp.message
2013-03-31 17:41:22 +02:00
assert resp.message.startswith("http://localhost:8087/authz")
part = cons.parse_authz(query=location)
aresp = part[0]
assert part[1] is None
assert part[2] is None
#aresp = client.parse_response(AuthorizationResponse, location,
# format="urlencoded",
# state="id-6da9ca0cc23959f5f33e8becd9b08cae")
print aresp.keys()
assert aresp.type() == "AuthorizationResponse"
assert _eq(aresp.keys(), ['request', 'state', 'redirect_uri',
2013-05-28 16:02:12 +02:00
'response_type', 'client_id', 'claims', 'scope'])
2014-10-01 11:37:06 +02:00
print cons.grant[_state].keys()
assert _eq(cons.grant[_state].keys(),
['code', 'tokens', 'id_token', 'exp_in', 'seed',
'grant_expiration_time'])
def test_server_authenticated_1():
server = provider_init
_session_db = {}
cons = Consumer(_session_db, CONSUMER_CONFIG, CLIENT_CONFIG,
server_info=SERVER_INFO, )
cons.debug = True
cons.keyjar[""] = KC_RSA
2014-10-01 11:37:06 +02:00
state, location = cons.begin("openid", "code", path="http://localhost:8087")
2013-03-31 17:41:22 +02:00
resp = server.authorization_endpoint(request=location.split("?")[1])
2013-03-31 17:41:22 +02:00
print resp
aresp = cons.parse_response(AuthorizationResponse, location,
sformat="urlencoded")
2013-03-31 17:41:22 +02:00
print aresp.keys()
assert aresp.type() == "AuthorizationResponse"
2013-05-28 16:02:12 +02:00
assert _eq(aresp.keys(), ['request', 'state', 'redirect_uri', 'claims',
2013-03-31 17:41:22 +02:00
'response_type', 'client_id', 'scope'])
def test_server_authenticated_2():
server = provider_init
2014-06-20 13:08:32 +02:00
server.baseurl = server.name
_session_db = {}
cons = Consumer(_session_db, CONSUMER_CONFIG, CLIENT_CONFIG,
server_info=SERVER_INFO, )
cons.debug = True
cons.keyjar[""] = KC_RSA
2014-10-01 11:37:06 +02:00
_state, location = cons.begin(scope="openid email claims_in_id_token",
response_type="code id_token",
path="http://localhost:8087")
print location
2013-03-31 17:41:22 +02:00
resp = server.authorization_endpoint(request=location.split("?")[1])
print resp.message
2013-03-31 17:41:22 +02:00
part = cons.parse_authz(resp.message)
print part
aresp = part[0]
assert part[1] is None
assert part[2] is not None
2013-03-31 17:41:22 +02:00
#aresp = cons.parse_response(AuthorizationResponse, location,
# sformat="urlencoded")
print aresp.keys()
assert aresp.type() == "AuthorizationResponse"
2013-03-31 17:41:22 +02:00
assert _eq(aresp.keys(), ['scope', 'state', 'code', 'id_token'])
2014-10-01 11:37:06 +02:00
print cons.grant[_state].keys()
assert _eq(cons.grant[_state].keys(), ['code', 'id_token', 'tokens',
'exp_in',
'grant_expiration_time', 'seed'])
2013-05-01 09:08:21 +02:00
id_token = part[2]
assert isinstance(id_token, IdToken)
print id_token.keys()
2014-10-01 11:37:06 +02:00
assert _eq(id_token.keys(),
['nonce', 'c_hash', 'sub', 'iss', 'acr', 'exp', 'auth_time',
'iat', 'aud'])
def test_server_authenticated_token():
server = provider_init
_session_db = {}
cons = Consumer(_session_db, CONSUMER_CONFIG, CLIENT_CONFIG,
server_info=SERVER_INFO, )
cons.debug = True
cons.keyjar[""] = KC_RSA
2014-10-01 11:37:06 +02:00
_state, location = cons.begin("openid", response_type="token",
path="http://localhost:8087")
2013-03-31 17:41:22 +02:00
resp = server.authorization_endpoint(request=location.split("?")[1])
2013-03-31 17:41:22 +02:00
txt = resp.message
assert "access_token=" in txt
assert "token_type=Bearer" in txt
def test_server_authenticated_none():
server = provider_init
_session_db = {}
cons = Consumer(_session_db, CONSUMER_CONFIG, CLIENT_CONFIG,
server_info=SERVER_INFO, )
cons.debug = True
cons.keyjar[""] = KC_RSA
2014-10-01 11:37:06 +02:00
_state, location = cons.begin("openid", response_type="none",
path="http://localhost:8087")
2013-03-31 17:41:22 +02:00
resp = server.authorization_endpoint(request=location.split("?")[1])
2013-03-31 17:41:22 +02:00
assert resp.message.startswith("http://localhost:8087/authz")
query_part = resp.message.split("?")[1]
print query_part
assert "state" in query_part
def test_token_endpoint():
server = provider_init
authreq = AuthorizationRequest(state="state",
redirect_uri="http://example.com/authz",
2014-06-20 13:08:32 +02:00
client_id=CLIENT_ID,
response_type="code",
scope=["openid"])
_sdb = server.sdb
sid = _sdb.token.key(user="sub", areq=authreq)
access_grant = _sdb.token(sid=sid)
2014-11-24 10:48:53 +01:00
ae = AuthnEvent("user")
_sdb[sid] = {
"oauth_state": "authz",
2014-11-24 10:48:53 +01:00
"authn_event": ae,
2014-06-20 13:08:32 +02:00
"authzreq": authreq.to_json(),
"client_id": CLIENT_ID,
"code": access_grant,
"code_used": False,
"scope": ["openid"],
2014-06-20 13:08:32 +02:00
"redirect_uri": "http://example.com/authz",
}
2014-11-24 10:48:53 +01:00
_sdb.do_sub(sid)
# Construct Access token request
areq = AccessTokenRequest(code=access_grant, client_id=CLIENT_ID,
redirect_uri="http://example.com/authz",
client_secret=CLIENT_SECRET)
txt = areq.to_urlencoded()
2013-03-31 17:41:22 +02:00
resp = server.token_endpoint(request=txt)
print resp
atr = AccessTokenResponse().deserialize(resp.message, "json")
print atr.keys()
assert _eq(atr.keys(), ['token_type', 'id_token', 'access_token', 'scope',
'expires_in', 'refresh_token'])
def test_token_endpoint_unauth():
server = provider_init
authreq = AuthorizationRequest(state="state",
redirect_uri="http://example.com/authz",
client_id="client_1")
_sdb = server.sdb
sid = _sdb.token.key(user="sub", areq=authreq)
access_grant = _sdb.token(sid=sid)
2014-11-24 10:48:53 +01:00
ae = AuthnEvent("user")
_sdb[sid] = {
2014-11-24 10:48:53 +01:00
"authn_event": ae,
"oauth_state": "authz",
"authzreq": "",
"client_id": "client_1",
"code": access_grant,
"code_used": False,
"scope": ["openid"],
"redirect_uri": "http://example.com/authz"
}
2014-11-24 10:48:53 +01:00
_sdb.do_sub(sid)
# Construct Access token request
areq = AccessTokenRequest(code=access_grant,
redirect_uri="http://example.com/authz",
client_id="client_1", client_secret="secret",)
2012-12-03 21:01:24 +01:00
print areq.to_dict()
txt = areq.to_urlencoded()
2013-03-31 17:41:22 +02:00
resp = server.token_endpoint(request=txt, remote_user="client2",
request_method="POST")
print resp
atr = TokenErrorResponse().deserialize(resp.message, "json")
print atr.keys()
assert _eq(atr.keys(), ['error'])
def test_authz_endpoint():
server = provider_init
cli = Client()
2013-05-28 16:02:12 +02:00
cli.redirect_uris = ["http://www.example.org/authz"]
cli.client_id = "client0"
cli.state = "_state_"
args = {"response_type": ["code", "token"], "scope": ["openid"]}
req = cli.construct_AuthorizationRequest(request_args=args)
2013-03-31 17:41:22 +02:00
resp = server.authorization_endpoint(request=req.to_urlencoded())
print resp.message
assert "token_type=Bearer" in resp.message
assert "code=" in resp.message
2013-05-28 16:02:12 +02:00
def test_idtoken():
server = provider_init
AREQ = AuthorizationRequest(response_type="code", client_id=CLIENT_ID,
redirect_uri="http://example.com/authz",
scope=["openid"], state="state000")
2014-11-24 10:48:53 +01:00
ae = AuthnEvent("sub")
sid = server.sdb.create_authz_session(ae, AREQ)
server.sdb.do_sub(sid)
session = server.sdb[sid]
2012-09-06 19:10:16 +02:00
id_token = server.id_token_as_signed_jwt(session)
print id_token
assert len(id_token.split(".")) == 3
def test_userinfo_endpoint():
server = provider_init
_session_db = {}
cons = Consumer(_session_db, CONSUMER_CONFIG, CLIENT_CONFIG,
server_info=SERVER_INFO)
cons.debug = True
cons.client_secret = "drickyoughurt"
cons.config["response_type"] = ["token"]
cons.config["request_method"] = "parameter"
cons.keyjar[""] = KC_RSA
2012-05-29 16:19:43 +02:00
2014-10-01 11:37:06 +02:00
state, location = cons.begin("openid", "token", path="http://localhost:8087")
2013-03-31 17:41:22 +02:00
resp = server.authorization_endpoint(request=location.split("?")[1])
2013-03-31 17:41:22 +02:00
line = resp.message
2014-04-23 21:31:24 +02:00
path, query = line.split("#")
# redirect
atr = AuthorizationResponse().deserialize(query, "urlencoded")
uir = UserInfoRequest(access_token=atr["access_token"], schema="openid")
2013-03-31 17:41:22 +02:00
resp3 = server.userinfo_endpoint(request=uir.to_urlencoded())
ident = OpenIDSchema().deserialize(resp3.message, "json")
print ident.keys()
assert _eq(ident.keys(), ['nickname', 'sub', 'name', 'email'])
print str(ident)
expected_sub = "%x" % hash(USERDB["username"]["sub"]+server.sdb.base_url)
assert ident["sub"] == expected_sub
def test_check_session_endpoint():
server = provider_init
print server.name
2013-01-01 16:51:52 +01:00
session = {"sub": "UserID", "client_id": "number5"}
2012-09-06 19:10:16 +02:00
idtoken = server.id_token_as_signed_jwt(session)
csr = CheckSessionRequest(id_token=idtoken)
2013-03-31 17:41:22 +02:00
info = server.check_session_endpoint(request=csr.to_urlencoded())
print info
idt = IdToken().deserialize(info.message, "json")
print idt.keys()
2013-01-01 16:51:52 +01:00
assert _eq(idt.keys(), ['sub', 'aud', 'iss', 'acr', 'exp', 'iat'])
assert idt["iss"] == server.name
def test_registration_endpoint():
server = provider_init
req = RegistrationRequest()
req["application_type"] = "web"
req["client_name"] = "My super service"
req["redirect_uris"] = ["http://example.com/authz"]
req["contacts"] = ["foo@example.com"]
req["response_types"] = ["code"]
print req.to_dict()
2013-05-01 09:08:21 +02:00
resp = server.registration_endpoint(request=req.to_json())
print resp.message
regresp = RegistrationResponse().deserialize(resp.message, "json")
print regresp.keys()
assert _eq(regresp.keys(), ['redirect_uris', 'contacts', 'application_type',
'client_name', 'registration_client_uri',
'client_secret_expires_at',
'registration_access_token',
'client_id', 'client_secret',
'client_id_issued_at', 'response_types'])
2012-05-29 16:19:43 +02:00
def test_provider_key_setup():
2014-11-24 10:48:53 +01:00
provider = Provider("pyoicserv", SessionDB(SERVER_INFO["issuer"]), None,
None, None, None, None, "")
provider.baseurl = "http://www.example.com/"
2013-06-12 09:59:52 +02:00
provider.key_setup("static", sig={"format": "jwk", "alg": "RSA"})
keys = provider.keyjar.get_signing_key("RSA")
assert len(keys) == 1
assert provider.jwks_uri == "http://www.example.com/static/jwks"
def _client_id(cdb):
cid = None
for k, item in cdb.items():
if item in cdb.keys():
cid = item
break
return cid
def test_registered_redirect_uri_without_query_component():
2013-03-31 17:41:22 +02:00
provider = Provider("FOO", {}, {}, None, None, None, None, "")
2013-02-03 10:57:46 +01:00
rr = RegistrationRequest(operation="register",
redirect_uris=["http://example.org/cb"],
response_types=["code"])
2013-05-01 09:08:21 +02:00
registration_req = rr.to_json()
2013-03-31 17:41:22 +02:00
provider.registration_endpoint(request=registration_req)
correct = [
"http://example.org/cb",
"http://example.org/cb/foo",
2013-02-03 10:57:46 +01:00
"http://example.org/cb?got=you",
"http://example.org/cb/foo?got=you"
]
faulty = [
"http://example.org/foo",
"http://example.com/cb",
]
cid = _client_id(provider.cdb)
for ruri in faulty:
areq = AuthorizationRequest(redirect_uri=ruri,
client_id=cid,
2012-12-03 20:25:42 +01:00
response_type="code",
scope="openid")
2012-12-03 20:25:42 +01:00
print areq
try:
provider._verify_redirect_uri(areq)
assert False
except RedirectURIError:
pass
for ruri in correct:
areq = AuthorizationRequest(redirect_uri=ruri,
client_id=cid,
response_type="code", scope="openid")
print areq
try:
provider._verify_redirect_uri(areq)
except RedirectURIError, err:
print err
assert False
def test_registered_redirect_uri_with_query_component():
2013-03-31 17:41:22 +02:00
provider2 = Provider("FOOP", {}, {}, None, None, None, None, "")
2013-02-03 10:57:46 +01:00
rr = RegistrationRequest(operation="register",
redirect_uris=["http://example.org/cb?foo=bar"],
response_types=["code"])
2013-05-01 09:08:21 +02:00
registration_req = rr.to_json()
2013-03-31 17:41:22 +02:00
resp = provider2.registration_endpoint(request=registration_req)
regresp = RegistrationResponse().from_json(resp.message)
2012-12-03 20:25:42 +01:00
print regresp.to_dict()
faulty = [
"http://example.org/cb",
"http://example.org/cb/foo",
2013-01-01 16:51:52 +01:00
"http://example.org/cb?got=you",
"http://example.org/cb?foo=you"
]
correct = [
"http://example.org/cb?foo=bar",
"http://example.org/cb?foo=bar&got=you",
"http://example.org/cb?foo=bar&foo=you"
]
cid = regresp["client_id"]
for ruri in faulty:
areq = AuthorizationRequest(redirect_uri=ruri,
client_id=cid,
2012-12-03 20:25:42 +01:00
scope="openid",
response_type="code")
2012-12-03 20:25:42 +01:00
print areq
try:
provider2._verify_redirect_uri(areq)
except RedirectURIError:
pass
for ruri in correct:
areq = AuthorizationRequest(redirect_uri=ruri,
client_id=cid, scope="openid",
response_type="code")
2012-12-03 21:01:24 +01:00
resp = provider2._verify_redirect_uri(areq)
print resp
assert resp is None
2013-05-01 09:08:21 +02:00
2014-11-12 15:12:47 +01:00
def test_key_rollover():
provider2 = Provider("FOOP", {}, {}, None, None, None, None, "")
provider2.keyjar = KEYJAR
# Number of KeyBundles
assert len(provider2.keyjar.issuer_keys[""]) == 1
kb = ec_init({"type": "EC", "crv": "P-256", "use": ["sig"]})
provider2.do_key_rollover(json.loads(kb.jwks()), "b%d")
print provider2.keyjar
assert len(provider2.keyjar.issuer_keys[""]) == 2
kb = ec_init({"type": "EC", "crv": "P-256", "use": ["sig"]})
provider2.do_key_rollover(json.loads(kb.jwks()), "b%d")
print provider2.keyjar
assert len(provider2.keyjar.issuer_keys[""]) == 3
sleep(1)
provider2.remove_inactive_keys(0)
assert len(provider2.keyjar.issuer_keys[""]) == 2
2013-05-01 09:08:21 +02:00
if __name__ == "__main__":
2014-11-24 10:48:53 +01:00
test_server_authorization_endpoint_id_token()