만나보세요
새로운 프레젠테이션 도우미가 기다리고 있어요.
뎌욱 빠르게 컨텐츠를 다듬고, 보강하고, 편집하고, 원하는 이미지를 찾고, 시각자료를 편집하세요.
트렌드 검색
GET /authorize
?response_type=code
&client_id=s6BhdRkqt3
&state=xyz
&scope=openid images
&redirect_uri=https%3A%2F%2Fclient%2Eexample%2Ecom%2Fcb HTTP/1.1
Host: server.example.com
Largest collection of genealogy
records in the world
Authentication Endpoint:
Token Endpoint:
Currently Use
Scopes
If you need more see UMA
Token Storage
Cookies?
Sessions?
Database?
Cache?
Simple
Not Scalable
Self Contained
Parsable
Not Simple
More Scalable
JWT:
To Access
Grant Access To
Client (3rd Party site)
Wants to access a resource
Classic Web Server Use Case
- redirect URL
- Client ID
- granted access
}
{
- redirect URL
- Client ID
- granted access
}
Validate
Remove Code (1-time use)
Generate Access Token
Javascript only client - no server backend
- no refresh token
- no client secret
- could be used for mobile
GET /resource HTTP/1.1
Host: server.example.com
Authorization: Bearer mF_9.B5f-4.1JqM
GET /resource?access_token=mF_9.B5f-4.1JqM HTTP/1.1
Host: server.example.com
POST /token HTTP/1.1
Host: server.example.com
Authorization: Basic czZCaGRSa3F0MzpnWDFmQmF0M2JW
Content-Type: application/x-www-form-urlencoded
grant_type=authorization_code
&code=SplxlOBeZQQYbYS6WxSbIA
&redirect_uri=https%3A%2F%2Fclient%2Eexample%2Ecom%2Fcb
POST /resource HTTP/1.1
Host: server.example.com
Content-Type: application/x-www-form-urlencoded
access_token=mF_9.B5f-4.1JqM
SSO
Client Credentials
Non-Browser Use
Mobile Use
Single Sign On
GET /authorize
?response_type=token
&client_id=s6BhdRkqt3
&state=xyz
&redirect_uri=https%3A%2F%2Fclient%2Eexample%2Ecom%2Fcb HTTP/1.1
Host: server.example.com
Authz request
Access Token
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Cache-Control: no-store
Pragma: no-cache
{
"access_token":"mF_9.B5f-4.1JqM",
"token_type":"bearer",
"expires_in":3600,
"refresh_token":"tGzv3JOkF0XG5Qx2TlKWIA",
"example_parameter":"example_value"
}
GET /resource HTTP/1.1
Host: server.example.com
Authorization: Bearer mF_9.B5f-4.1JqM
POST /resource HTTP/1.1
Host: server.example.com
Content-Type: application/x-www-form-urlencoded
access_token=mF_9.B5f-4.1JqM
POST /token HTTP/1.1
Host: server.example.com
Authorization: Basic czZCaGRSa3F0MzpnWDFmQmF0M2JW
Content-Type: application/x-www-form-urlencoded
grant_type=authorization_code
&code=SplxlOBeZQQYbYS6WxSbIA
&redirect_uri=https%3A%2F%2Fclient%2Eexample%2Ecom%2Fcb
Refresh Tokens
Access Token
Password
- redirect URL
- Client ID
- granted access
}
{
- redirect URL
- Client ID
- granted access
}
Validate
Remove Code (1-time use)
Generate Access Token
- redirect URL
- Client ID
- granted access
}
{
- redirect URL
- Client ID
- granted access
}
Validate
Remove Code (1-time use)
Generate Access Token
Access Token
Access Token
+
Refresh Token
GET /resource HTTP/1.1
Host: server.example.com
Authorization: Bearer mF_9.B5f-4.1JqM
SSO
Access Token
Expires
POST /token HTTP/1.1
Host: server.example.com
Authorization: Basic czZCaGRSa3F0MzpnWDFmQmF0M2JW
Content-Type: application/x-www-form-urlencoded
grant_type=authorization_code
&code=SplxlOBeZQQYbYS6WxSbIA
&redirect_uri=https%3A%2F%2Fclient%2Eexample%2Ecom%2Fcb
GET /resource?access_token=mF_9.B5f-4.1JqM HTTP/1.1
Host: server.example.com
POST /resource HTTP/1.1
Host: server.example.com
Content-Type: application/x-www-form-urlencoded
access_token=mF_9.B5f-4.1JqM
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Cache-Control: no-store
Pragma: no-cache
{
"access_token":"mF_9.B5f-4.1JqM",
"token_type":"bearer",
"expires_in":3600,
"refresh_token":"tGzv3JOkF0XG5Qx2TlKWIA",
"example_parameter":"example_value"
}
+
Refresh Token
Refresh Token
GET /resource HTTP/1.1
Host: server.example.com
Authorization: Bearer mF_9.B5f-4.1JqM
GET /resource?access_token=mF_9.B5f-4.1JqM HTTP/1.1
Host: server.example.com
POST /resource HTTP/1.1
Host: server.example.com
Content-Type: application/x-www-form-urlencoded
access_token=mF_9.B5f-4.1JqM
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Cache-Control: no-store
Pragma: no-cache
{
"access_token":"mF_9.B5f-4.1JqM",
"token_type":"bearer",
"expires_in":3600,
"refresh_token":"tGzv3JOkF0XG5Qx2TlKWIA",
"example_parameter":"example_value"
}
Single Sign Out
Identity = OIDP Issuer Name + Sub
Subject must be unique at the issuer
Subject names cannot be used:
SOAP & XML
More SOAP Features
No passwords for web services
No identity needed - just authorization
Could use services anonymously
Eran Hammer
Only The Big Boys can Implement it
Identity ProviderOIDP
REST & JSON
IETF standards process: Google, Microsoft, Facebook, Oracle...
Relying Party
AuthN Request
302: Auth Code
HTTP/1.1 302 Found
Location: https://client.example.com/cb
?code=SplxlOBeZQQYbYS6WxSbIA
&state=xyz
GET /authorize
?response_type=code
&client_id=s6BhdRkqt3
&state=xyz
&scope=openid images
&redirect_uri=https%3A%2F%2Fclient%2Eexample%2Ecom%2Fcb HTTP/1.1
Host: server.example.com
Auth Code
Access and ID Token
AuthN Request
POST /token HTTP/1.1
Host: server.example.com
Authorization: Basic czZCaGRSa3F0MzpnWDFmQmF0M2JW
Content-Type: application/x-www-form-urlencoded
grant_type=authorization_code
&code=SplxlOBeZQQYbYS6WxSbIA
&redirect_uri=https%3A%2F%2Fclient%2Eexample%2Ecom%2Fcb
GET /resource HTTP/1.1
Host: server.example.com
Authorization: Bearer mF_9.B5f-4.1JqM
302: Auth Code
GET /resource?access_token=mF_9.B5f-4.1JqM HTTP/1.1
Host: server.example.com
POST /resource HTTP/1.1
Host: server.example.com
Content-Type: application/x-www-form-urlencoded
access_token=mF_9.B5f-4.1JqM
HTTP/1.1 302 Found
Location: https://client.example.com/cb
?code=SplxlOBeZQQYbYS6WxSbIA
&state=xyz
Access Token
Auth Code
Access and ID Token
User Claims
POST /token HTTP/1.1
Host: server.example.com
Authorization: Basic czZCaGRSa3F0MzpnWDFmQmF0M2JW
Content-Type: application/x-www-form-urlencoded
grant_type=authorization_code
&code=SplxlOBeZQQYbYS6WxSbIA
&redirect_uri=https%3A%2F%2Fclient%2Eexample%2Ecom%2Fcb
GET /resource HTTP/1.1
Host: server.example.com
Authorization: Bearer mF_9.B5f-4.1JqM
GET /resource?access_token=mF_9.B5f-4.1JqM HTTP/1.1
Host: server.example.com
POST /resource HTTP/1.1
Host: server.example.com
Content-Type: application/x-www-form-urlencoded
access_token=mF_9.B5f-4.1JqM
302: AuthN request
Access Token
Redirect or JS autosubmit to the
Authorization Endpoint
302: AuthN request
Redirect or JS autosubmit to the
Authorization Endpoint
GET /authorize
?response_type=id_token%20token
&client_id=s6BhdRkqt3
&state=xyz
&scope=openid images
&redirect_uri=https%3A%2F%2Fclient%2Eexample%2Ecom%2Fcb HTTP/1.1
Host: server.example.com
AuthN Request
GET /authorize
?response_type=code
&client_id=s6BhdRkqt3
&state=xyz
&scope=openid images
&redirect_uri=https%3A%2F%2Fclient%2Eexample%2Ecom%2Fcb HTTP/1.1
Host: server.example.com
Access & ID Token
AuthN Request
HTTP/1.1 302 Found
Location: https://client.example.com/cb
?code=SplxlOBeZQQYbYS6WxSbIA
&state=xyz
code or token or id_token
HTTP/1.1 302 Found
Location: https://client.example.com/cb
?code=SplxlOBeZQQYbYS6WxSbIA
&state=xyz
GET /resource HTTP/1.1
Host: server.example.com
Authorization: Bearer mF_9.B5f-4.1JqM
POST /token HTTP/1.1
Host: server.example.com
Authorization: Basic czZCaGRSa3F0MzpnWDFmQmF0M2JW
Content-Type: application/x-www-form-urlencoded
grant_type=authorization_code
&code=SplxlOBeZQQYbYS6WxSbIA
&redirect_uri=https%3A%2F%2Fclient%2Eexample%2Ecom%2Fcb
GET /resource?access_token=mF_9.B5f-4.1JqM HTTP/1.1
Host: server.example.com
POST /resource HTTP/1.1
Host: server.example.com
Content-Type: application/x-www-form-urlencoded
access_token=mF_9.B5f-4.1JqM
Access Token
Auth Code
Access or ID Token
GET /resource HTTP/1.1
Host: server.example.com
Authorization: Bearer mF_9.B5f-4.1JqM
GET /resource?access_token=mF_9.B5f-4.1JqM HTTP/1.1
Host: server.example.com
POST /resource HTTP/1.1
Host: server.example.com
Content-Type: application/x-www-form-urlencoded
access_token=mF_9.B5f-4.1JqM
HTTP/1.1 200 OK
Content-Type: application/json
Cache-Control: no-store
Pragma: no-cache
{
"access_token": "SlAV32hkKG",
"token_type": "Bearer",
"refresh_token": "8xLOxBtZp8",
"expires_in": 3600,
"id_token": "eyJhbGciOiJSUzI1NiIsImtpZCI6IjFlOWdkazcifQ.ewogImlzc
yI6ICJodHRwOi8vc2VydmVyLmV4YW1wbGUuY29tIiwKICJzdWIiOiAiMjQ4Mjg5
NzYxMDAxIiwKICJhdWQiOiAiczZCaGRSa3F0MyIsCiAibm9uY2UiOiAibi0wUzZ
fV3pBMk1qIiwKICJleHAiOiAxMzExMjgxOTcwLAogImlhdCI6IDEzMTEyODA5Nz
AKfQ.ggW8hZ1EuVLuxNuuIJKX_V8a_OMXzR0EHR9R6jgdqrOOF4daGU96Sr_P6q
Jp6IcmD3HP99Obi1PRs-cwh3LO-p146waJ8IhehcwL7F09JdijmBqkvPeB2T9CJ
NqeGpe-gccMg4vfKjkM8FcGvnzZUN4_KSP0aAp1tOJ1zZwgjxqGByKHiOtX7Tpd
QyHE5lcMiKPXfEIQILVq0pc_E2DzL7emopWoaoZTF_m0_N0YzFC6g6EJbOEoRoS
K5hoDalrcvRYLSrQAZZKflyuVCyixEoV9GfNQC3_osjzw2PAithfubEEBLuVVk4
XUVrWOLrLl0nx7RkKU8NXNHq-rvKMzqg"
}
Access Token
302: AuthN request
Redirect or JS autosubmit to the
Authorization Endpoint
302: AuthN request
Redirect or JS autosubmit to the
Authorization Endpoint
Resource
Auth Code
Access Token
Resource
302: Authz request
Redirect or JS autosubmit to the
Authorization Endpoint
Resource
Auth Code
302: Auth Code
HTTP/1.1 302 Found
Location: https://client.example.com/cb
?code=SplxlOBeZQQYbYS6WxSbIA
&state=xyz
GET /authorize
?response_type=code
&client_id=s6BhdRkqt3
&state=xyz
&scope=images
&redirect_uri=https%3A%2F%2Fclient%2Eexample%2Ecom%2Fcb HTTP/1.1
Host: server.example.com
Authz request
Access Token
Access Token
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Cache-Control: no-store
Pragma: no-cache
{
"access_token":"mF_9.B5f-4.1JqM",
"token_type":"bearer",
"expires_in":3600,
"refresh_token":"tGzv3JOkF0XG5Qx2TlKWIA",
"example_parameter":"example_value"
}
Resource
Resource
GET /resource HTTP/1.1
Host: server.example.com
Authorization: Bearer mF_9.B5f-4.1JqM
POST /resource HTTP/1.1
Host: server.example.com
Content-Type: application/x-www-form-urlencoded
access_token=mF_9.B5f-4.1JqM
Access Token
Resource
GET /authorize
?response_type=code
&client_id=s6BhdRkqt3
&state=xyz
&scope=images
&redirect_uri=https%3A%2F%2Fclient%2Eexample%2Ecom%2Fcb HTTP/1.1
Host: server.example.com
Authz request
Auth Code
Resource
POST /token HTTP/1.1
Host: server.example.com
Authorization: Basic czZCaGRSa3F0MzpnWDFmQmF0M2JW
Content-Type: application/x-www-form-urlencoded
grant_type=authorization_code
&code=SplxlOBeZQQYbYS6WxSbIA
&redirect_uri=https%3A%2F%2Fclient%2Eexample%2Ecom%2Fcb
Auth Code
Resource
Access Token
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Cache-Control: no-store
Pragma: no-cache
{
"access_token":"mF_9.B5f-4.1JqM",
"token_type":"bearer",
"expires_in":3600,
"refresh_token":"tGzv3JOkF0XG5Qx2TlKWIA",
"example_parameter":"example_value"
}
302: Authz request
Redirect or JS autosubmit to the
Authorization Endpoint
Access Token
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Cache-Control: no-store
Pragma: no-cache
{
"access_token":"mF_9.B5f-4.1JqM",
"token_type":"bearer",
"expires_in":3600,
"refresh_token":"tGzv3JOkF0XG5Qx2TlKWIA",
"example_parameter":"example_value"
}
Resource
Auth Code
Auth Code
302: Auth Code
HTTP/1.1 302 Found
Location: https://client.example.com/cb
?code=SplxlOBeZQQYbYS6WxSbIA
&state=xyz
Auth Code
Resource
POST /token HTTP/1.1
Host: server.example.com
Authorization: Basic czZCaGRSa3F0MzpnWDFmQmF0M2JW
Content-Type: application/x-www-form-urlencoded
grant_type=authorization_code
&code=SplxlOBeZQQYbYS6WxSbIA
&redirect_uri=https%3A%2F%2Fclient%2Eexample%2Ecom%2Fcb
Auth Code
Access Token
GET /resource HTTP/1.1
Host: server.example.com
Authorization: Bearer mF_9.B5f-4.1JqM
POST /resource HTTP/1.1
Host: server.example.com
Content-Type: application/x-www-form-urlencoded
access_token=mF_9.B5f-4.1JqM
Access Token