SlideShare une entreprise Scribd logo
1  sur  89
Télécharger pour lire hors ligne
JWT
To infinity

& beyond!
authentication
Luís Cobucci

@lcobucci
https://goo.gl/gbd3H5
Tokens?
https://goo.gl/C0LI6F
Browser
Server DB
Browser
Server
1. presents credentials
POST /login


{

"email": "aa@aa.com",
"password": "amazing!"

}
DB
Browser
Server DB
1. presents credentials
2. validates and starts a session
Browser
Server DB
1. presents credentials
2. validates and starts a session
200 OK
Set-Cookie: PHPSESSIONID=ABC123;
Domain=foo.bar; Secure; HttpOnly;
Expires=Thu, 1 Jun 2017 12:00:00
GMT
Browser
Server DB
1. presents credentials
2. validates and starts a session
200 OK
Set-Cookie: PHPSESSIONID=ABC123;
Domain=foo.bar; Secure; HttpOnly;
Expires=Thu, 1 Jun 2017 12:00:00
GMT
Browser
Server DB
1. presents credentials
2. validates and starts a session
3. sends cookies on next requests
GET /
Cookie: PHPSESSIONID=ABC123
Browser
Server DB
1. presents credentials
2. validates and starts a session
3. sends cookies on next requests
4. reads session data and returns a
specific response for logged user
200 OK
Hello John!
“ (…) Each request from any client
contains all the information
necessary to service the request, and
session state is held in the client.
Representational State Transfer - Wikipedia
A mission
http://goo.gl/RfVHNu
{
"token": "abc123", "uid": 1, "expiration": "…",

"scope": ["a", "b", "c"]
}
{
"token": "abc123", "uid": 1,

"expiration": "…", "scope": ["a", "b", "c"]
}
{
"token": "def123", "uid": 2,

"expiration": "…", "scope": ["a", "b"]
}
{
"token": "abc123", "uid": 1,

"expiration": "…", "scope": ["a", "b", "c"]
}
{
"token": "def123", "uid": 2,

"expiration": "…", "scope": ["a", "b"]
}
{
"token": "abc456", "uid": 3,

"expiration": "…", "scope": ["a", "b", "c"]
}
{
"token": "def456", "uid": 4,

"expiration": "…", "scope": ["a", "b"]
}
{
"token": "abc123", "uid": 1,

"expiration": "…", "scope": ["a", "b", "c"]
}
{
"token": "def123", "uid": 2,

"expiration": "…", "scope": ["a", "b"]
}
{
"token": "abc456", "uid": 3,

"expiration": "…", "scope": ["a", "b", "c"]
}
{
"token": "def456", "uid": 4,

"expiration": "…", "scope": ["a", "b"]
}
{
"token": "abc789", "uid": 5,

"expiration": "…", "scope": ["a", "b"]
}
{
"token": "def789", "uid": 6,

"expiration": "…", "scope": ["a"]
}
{
"token": "ghi123", "uid": 1,

"expiration": "…", "scope": ["a", "b", "c"]
}
{
"token": "jkl123", "uid": 2,

"expiration": "…", "scope": ["a", "b"]
}
{
"token": "ghi456", "uid": 3,

"expiration": "…", "scope": ["a", "b", "c"]
}
{
"token": "jkl456", "uid": 4,

"expiration": "…", "scope": ["a", "b"]
}
{
"token": "ghi789", "uid": 5,

"expiration": "…", "scope": ["a", "b"]
}
{
"token": "jkl789", "uid": 6,

"expiration": "…", "scope": ["a"]
}
{
"token": "abc123", "uid": 1,

"expiration": "…", "scope": ["a", "b", "c"]
}
{
"token": "def123", "uid": 2,

"expiration": "…", "scope": ["a", "b"]
}
{
"token": "abc456", "uid": 3,

"expiration": "…", "scope": ["a", "b", "c"]
}
{
"token": "def456", "uid": 4,

"expiration": "…", "scope": ["a", "b"]
}
{
"token": "abc789", "uid": 5,

"expiration": "…", "scope": ["a", "b"]
}
{
"token": "def789", "uid": 6,

"expiration": "…", "scope": ["a"]
}
{
"token": "ghi123", "uid": 1,

"expiration": "…", "scope": ["a", "b", "c"]
}
{
"token": "jkl123", "uid": 2,

"expiration": "…", "scope": ["a", "b"]
}
{
"token": "ghi456", "uid": 3,

"expiration": "…", "scope": ["a", "b", "c"]
}
{
"token": "jkl456", "uid": 4,

"expiration": "…", "scope": ["a", "b"]
}
{
"token": "ghi789", "uid": 5,

"expiration": "…", "scope": ["a", "b"]
}
{
"token": "jkl789", "uid": 6,

"expiration": "…", "scope": ["a"]
}
{
"token": "abc123", "uid": 1,

"expiration": "…", "scope": ["a", "b", "c"]
}
{
"token": "def123", "uid": 2,

"expiration": "…", "scope": ["a", "b"]
}
{
"token": "abc456", "uid": 3,

"expiration": "…", "scope": ["a", "b", "c"]
}
{
"token": "def456", "uid": 4,

"expiration": "…", "scope": ["a", "b"]
}
{
"token": "abc789", "uid": 5,

"expiration": "…", "scope": ["a", "b"]
}
{
"token": "def789", "uid": 6,

"expiration": "…", "scope": ["a"]
}
{
"token": "ghi123", "uid": 1,

"expiration": "…", "scope": ["a", "b", "c"]
}
{
"token": "jkl123", "uid": 2,

"expiration": "…", "scope": ["a", "b"]
}
{
"token": "ghi456", "uid": 3,

"expiration": "…", "scope": ["a", "b", "c"]
}
{
"token": "jkl456", "uid": 4,

"expiration": "…", "scope": ["a", "b"]
}
{
"token": "ghi789", "uid": 5,

"expiration": "…", "scope": ["a", "b"]
}
{
"token": "jkl789", "uid": 6,

"expiration": "…", "scope": ["a"]
}
{
"token": "abc123", "uid": 1,

"expiration": "…", "scope": ["a", "b", "c"]
}
{
"token": "def123", "uid": 2,

"expiration": "…", "scope": ["a", "b"]
}
{
"token": "abc456", "uid": 3,

"expiration": "…", "scope": ["a", "b", "c"]
}
{
"token": "def456", "uid": 4,

"expiration": "…", "scope": ["a", "b"]
}
{
"token": "abc789", "uid": 5,

"expiration": "…", "scope": ["a", "b"]
}
{
"token": "def789", "uid": 6,

"expiration": "…", "scope": ["a"]
}
{
"token": "ghi123", "uid": 1,

"expiration": "…", "scope": ["a", "b", "c"]
}
{
"token": "jkl123", "uid": 2,

"expiration": "…", "scope": ["a", "b"]
}
{
"token": "ghi456", "uid": 3,

"expiration": "…", "scope": ["a", "b", "c"]
}
{
"token": "jkl456", "uid": 4,

"expiration": "…", "scope": ["a", "b"]
}
{
"token": "ghi789", "uid": 5,

"expiration": "…", "scope": ["a", "b"]
}
{
"token": "jkl789", "uid": 6,

"expiration": "…", "scope": ["a"]
}
{
"token": "abc123", "uid": 1,

"expiration": "…", "scope": ["a", "b", "c"]
}
{
"token": "def123", "uid": 2,

"expiration": "…", "scope": ["a", "b"]
}
{
"token": "abc456", "uid": 3,

"expiration": "…", "scope": ["a", "b", "c"]
}
{
"token": "def456", "uid": 4,

"expiration": "…", "scope": ["a", "b"]
}
{
"token": "abc789", "uid": 5,

"expiration": "…", "scope": ["a", "b"]
}
{
"token": "def789", "uid": 6,

"expiration": "…", "scope": ["a"]
}
{
"token": "ghi123", "uid": 1,

"expiration": "…", "scope": ["a", "b", "c"]
}
{
"token": "jkl123", "uid": 2,

"expiration": "…", "scope": ["a", "b"]
}
{
"token": "ghi456", "uid": 3,

"expiration": "…", "scope": ["a", "b", "c"]
}
{
"token": "jkl456", "uid": 4,

"expiration": "…", "scope": ["a", "b"]
}
{
"token": "ghi789", "uid": 5,

"expiration": "…", "scope": ["a", "b"]
}
{
"token": "jkl789", "uid": 6,

"expiration": "…", "scope": ["a"]
}
Wonderful, right?
http://goo.gl/9jQFkj
No!
http://goo.gl/XHI1fw
We need

SIMPLE !it
Luís Cobucci

@lcobucci
JOSEJSON Object Signing and Encryption
JOSEJSON Object Signing and Encryption
jws jwa
jwt jwe
jwk
eyJ0eXAiOiJKV1QiLCJhbGciOiJ
IUzI1NiJ9.eyJ1c2VyIjp7ImlkI
joxLCJuYW1lIjoiTHXDrXMgQ29i
dWNjaSJ9fQ.
eyJ0eXAiOiJKV1QiLCJhbGciOiJ
IUzI1NiJ9.eyJ1c2VyIjp7ImlkI
joxLCJuYW1lIjoiTHXDrXMgQ29i
dWNjaSJ9fQ.
base64_encode()
eyJ0eXAiOiJKV1QiLCJhbGciOiJ
IUzI1NiJ9.eyJ1c2VyIjp7ImlkI
joxLCJuYW1lIjoiTHXDrXMgQ29i
dWNjaSJ9fQ.
eyJ0eXAiOiJKV1QiLCJhbGciOiJ
IUzI1NiJ9
.
eyJ1c2VyIjp7ImlkIjoxLCJuYW1
lIjoiTHXDrXMgQ29idWNjaSJ9fQ
.
Base64URL
eyJ0eXAiOiJKV1QiLCJhbGciOiJ
IUzI1NiJ9
.
eyJ1c2VyIjp7ImlkIjoxLCJuYW1
lIjoiTHXDrXMgQ29idWNjaSJ9fQ
.
+ → -

/ → _

= → (removed)
TeSJWlQ/
S4YaOgK5tz7j+3KxBA
g3HTONa9NP80R+9mY=
TeSJWlQ_S4YaOgK5tz7
j-3KxBAg3HTONa9NP80
R-9mY
function base64url_encode(string $data): string {
$data = base64_encode($data);


return rtrim(

strtr($data, '+/', '-_'),
'='
);
}
function base64url_decode(string $data): string {

if ($remainder = strlen($data) % 4) {
$data .= str_repeat('=', 4 - $remainder);
}
return base64_decode(

strtr($data, '-_', '+/')
);
}
eyJ0eXAiOiJKV1QiLCJhbGciOiJ
IUzI1NiJ9
.
eyJ1c2VyIjp7ImlkIjoxLCJuYW1
lIjoiTHXDrXMgQ29idWNjaSJ9fQ
.
{

"typ": "JWT",

"alg": "none"

}
{

"user": {

"id": 1,

"name": "Luís Cobucci"

}

}
The JSON!
http://goo.gl/gH0hsx
401
Unauthorised
http://goo.gl/yyZ7oC
Client
API DB
1. presents credentials
POST /auth


{

"email": "aa@aa.com",
"password": "amazing!"

}
Client
API DB
1. presents credentials
2. validates and creates a token
Client
API
- issuer: auth.example.com
- permitted to: client.example.com
- expires in 300 seconds
DB
1. presents credentials
2. validates and creates a token
201 Created


{

"token": "…"

}
Client
API DB
1. presents credentials
2. validates and creates a token
3. sends the issued token
GET /
Authorization: …
Client
API DB
1. presents credentials
2. validates and creates a token
3. sends the issued token
4. verifies the signature, validates the
claims and processes the request
- is it valid?
- client allowed?
- expected issuer?
- can it be used at this moment?
Client
API DB
How about OAuth2?
Sessions
https://goo.gl/KNrl16
file
Webserver
Set-Cookie:

SESSION_ID=123abc
file a
Webserver
Client
SESSION_ID=123abc
file a
Webserver 1
Client
SESSION_ID=123abc
file b
Webserver 2
file c
Webserver 3
Load balancer
Webserver 1
Client
SESSION=eyJ0eXAiOiJKV1QiLCJhbGciO
iJIUzI1NiJ9.eyJ1c2VyIjp7ImlkIjoxL
CJuYW1lIjoiTHXDrXMgQ29idWNjaSJ9fQ
.hv9V7gBBJPeWMbwFFmRP7clLuof7r9fV
JzZbLZIxBTs
Webserver 2 Webserver 3
Load balancer
!
1. cannot store private information
in the session



2. sessions cannot be invalidated


3. increased network traffic



4. race conditions with highly
concurrent HTTP requests writing
to session



5. limit on the amount of data
stored in session
More!!
https://goo.gl/gEjEMm
https://goo.gl/GB6YkQ
Let’s investigate it
{

"typ": "JWT",

"alg": "none"

}
{

"user": {

"id": 1,

"name": "Luís Cobucci"

}

}
headers
{

"typ": "JWT",

"alg": "none"

}
{

"user": {

"id": 1,

"name": "Luís Cobucci"

}

}
headers
{

"typ": "JWT",

"alg": "none"

}
{

"user": {

"id": 1,

"name": "Luís Cobucci"

}

}
claims
Base64URL( )

+ "." + 

Base64URL( )

+ "."
headers
claims
headers
{

"typ": "JWT",

"alg": "none"

}
{

"user": {

"id": 1,

"name": "Luís Cobucci"

}

}
claims
eyJhbGciOiJub25lIiwidHlwIjo
iSldUIn0

.

eyJ1c2VyIjp7ImlkIjoxLCJuYW1
lIjoiTHXDrXMgQ29idWNjaSJ9fQ

.
Can you trust it?
https://goo.gl/EeeIdu
Base64URL( )

+ "." + 

Base64URL( )
headers
claims
payload
Base64URL( )

+ "." + 

Base64URL( )
headers
claims
payload
= alg( , )payload keysignature
Base64URL( )

+ "." + 

Base64URL( )

+ "." + 

Base64URL( )
headers
claims
signature
function jwt_create(
array $headers,
array $claims,
string $key
): string {

$headers = base64url_encode(json_encode($headers));

$claims = base64url_encode(json_encode($claims));
$payload = $headers . '.' . $claims;
$signature = base64url_encode(

hash_hmac('sha256', $payload, $key, true)

);
return $payload . '.' . $signature;
}
What
algorithms?
https://goo.gl/qNTg3D
HS256
HS384
HS512
RS256
RS384
RS512
ES256
ES384
ES512
PS256
PS384
PS512
none
HMAC
RSA
ECDSA
RSASSA-PSS
HS256
HS384
HS512
RS256
RS384
RS512
ES256
ES384
ES512
PS256
PS384
PS512
none
HMAC
RSA
ECDSA
RSASSA-PSS
HS256
HS384
HS512
RS256
RS384
RS512
ES256
ES384
ES512
PS256
PS384
PS512
none
HMAC
RSA
ECDSA
RSASSA-PSS
headers
{

"typ": "JWT",

"alg": "HS256"

}
{

"user": {

"id": 1,

"name": "Luís Cobucci"

}

}
claims
key
Hello JWT+JWS!
eyJhbGciOiJub25lIiwidHlwIjo
iSldUIn0

.

eyJ1c2VyIjp7ImlkIjoxLCJuYW1
lIjoiTHXDrXMgQ29idWNjaSJ9fQ

.

hv9V7gBBJPeWMbwFFmRP7clLuof
7r9fVJzZbLZIxBTs
How much data?
https://goo.gl/eHFQwO
iat (NumericDate)
exp (NumericDate)
nbf (NumericDate)
jti (String)
iss (StringOrUri)
aud (StringOrUri[])
sub (StringOrUri)
iat (NumericDate)
exp (NumericDate)
nbf (NumericDate)
jti (String)
iss (StringOrUri)
aud (StringOrUri[])
sub (StringOrUri)
case-sensitive
https://goo.gl/bkXMeq
Revoke tokens?
PHP libraries!
https://goo.gl/bGP8u8
declare(strict_types=1);
require 'vendor/autoload.php';
use LcobucciJWTConfiguration;
use LcobucciJWTSignerKey;
use LcobucciJWTSignerHmacSha256;
return Configuration::forSymmetricSigner(
new Sha256(),
new Key('my super secret key')
);
declare(strict_types=1);
require 'vendor/autoload.php';
use LcobucciJWTConfiguration;
use LcobucciJWTSignerKey;
use LcobucciJWTSignerRsaSha256;
return Configuration::forAsymmetricSigner(
new Sha256(),
new Key('file://private.pem', 'testing'),
new Key('file://public.pem')
);
declare(strict_types=1);
/** @var LcobucciJWTConfiguration $config */
$config = require 'config.php';
$signer = $config->getSigner();
$key = $config->getSigningKey();
$token = $config->createBuilder()
->withClaim('uid', 1)
->getToken($signer, $key);
declare(strict_types=1);
/** @var LcobucciJWTConfiguration $config */
$config = require 'config.php';
$signer = $config->getSigner();
$key = $config->getSigningKey();
$token = $config->createBuilder()
->withClaim('uid', 1)
->identifiedBy(bin2hex(random_bytes(16)))
->getToken($signer, $key);
declare(strict_types=1);
/** @var LcobucciJWTConfiguration $config */
$config = require 'config.php';
$signer = $config->getSigner();
$key = $config->getSigningKey();
$token = $config->createBuilder()
->withClaim('uid', 1)
->identifiedBy(bin2hex(random_bytes(16)))
->issuedBy('https://foo.bar')
->getToken($signer, $key);
declare(strict_types=1);
/** @var LcobucciJWTConfiguration $config */
$config = require 'config.php';
$signer = $config->getSigner();
$key = $config->getSigningKey();
$token = $config->createBuilder()
->withClaim('uid', 1)
->identifiedBy(bin2hex(random_bytes(16)))
->issuedBy('https://foo.bar')

->permittedFor('https://client1.bar')

->permittedFor('https://client2.bar')
->getToken($signer, $key);
declare(strict_types=1);
/** @var LcobucciJWTConfiguration $config */
$config = require 'config.php';
$signer = $config->getSigner();
$key = $config->getSigningKey();
$now = new DateTimeImmutable();
$token = $config->createBuilder()
->withClaim('uid', 1)
->identifiedBy(bin2hex(random_bytes(16)))
->issuedBy('https://foo.bar')

->permittedFor('https://client1.bar')

->permittedFor('https://client2.bar')

->issuedAt($now)

->canOnlyBeUsedAfter($now->modify('+5 minutes'))

->expiresAt($now->modify('+1 hour'))
->getToken($signer, $key);
eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9

.

eyJ1aWQiOjEsImp0aSI6ImFhMzk3YzA2ZDUwZmRhNjYyYWUwZGE4OTU2ODdmN
zY3IiwiaXNzIjoiaHR0cHM6Ly9mb28uYmFyIiwiYXVkIjpbImh0dHBzOi8vY2
xpZW50MS5iYXIiLCJodHRwczovL2NsaWVudDIuYmFyIl0sImlhdCI6IjE0OTU
xNzg5MDQuODY4ODc5IiwibmJmIjoiMTQ5NTE3OTIwNC44Njg4NzkiLCJleHAi
OiIxNDk1MTgyNTA0Ljg2ODg3OSJ9

.

jwXzXjm8cU92yxP3XcENg_ZnDvW1MkRTzSoaAwOYCTlSdQ5rv-
dCLn_7_XPLHSuiACt_aFTnB093GYTpJQKRnqIFPYteK2jVnQALXNPxntnp-
v6SMiFBxofCaVSjgKTWdqkWB4agWrTR77HK_iKdFoZMIdpr8UUBJatkc_MCoD
vDMtuDRXwIEBfjs9baICtBvTZyDD7iiMmF4F_qvp2mWd_Qy93gZCrePKAJsgY
-
sujg84iQFOs-6I3GjybzA0U0Y_bTmCmQHfhRUX5_gL21bZxBFef38OFKW73Vx
ehBxM4Ok_nWRbGY7ehsMBshXkJQfp97TJ1cV35a9zyAVXC04A
{

"typ": "JWT",

"alg": "RS256"

}
{

"uid": 1,
"jti": "aa397c06d50fda662ae0da895687f767",
"iss": "https://foo.bar",
"aud": ["https://client1.bar", “https://client2.bar”],
"iat": "1495178904.868879",
"nbf": "1495179204.868879",
"exp": "1495182504.868879"

}
declare(strict_types=1);
/** @var LcobucciJWTConfiguration $config */
$config = require 'config.php';
$jwt = 'eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJ1aWQiOjEsImp0aSI6ImFh'
. 'Mzk3YzA2ZDUwZmRhNjYyYWUwZGE4OTU2ODdmNzY3IiwiaXNzIjoiaHR0cHM6L'
. 'y9mb28uYmFyIiwiYXVkIjpbImh0dHBzOi8vY2xpZW50MS5iYXIiLCJodHRwcz'
. 'ovL2NsaWVudDIuYmFyIl0sImlhdCI6IjE0OTUxNzg5MDQuODY4ODc5IiwibmJ'

. 'mIjoiMTQ5NTE3OTIwNC44Njg4NzkiLCJleHAiOiIxNDk1MTgyNTA0Ljg2ODg3'
. 'OSJ9.jwXzXjm8cU92yxP3XcENg_ZnDvW1MkRTzSoaAwOYCTlSdQ5rv-dCLn_7'

. '_XPLHSuiACt_aFTnB093GYTpJQKRnqIFPYteK2jVnQALXNPxntnp-v6SMiFBx'

. 'ofCaVSjgKTWdqkWB4agWrTR77HK_iKdFoZMIdpr8UUBJatkc_MCoDvDMtuDRX'

. 'wIEBfjs9baICtBvTZyDD7iiMmF4F_qvp2mWd_Qy93gZCrePKAJsgY-sujg84i'

. 'QFOs-6I3GjybzA0U0Y_bTmCmQHfhRUX5_gL21bZxBFef38OFKW73VxehBxM4O'

. 'k_nWRbGY7ehsMBshXkJQfp97TJ1cV35a9zyAVXC04A';



$token = $config->getParser()->parse($jwt);
declare(strict_types=1);
use LcobucciClockSystemClock;

use LcobucciJWTValidationConstraint;
/** @var LcobucciJWTConfiguration $config */
$config = require 'config.php';
$signer = $config->getSigner();
$key = $config->getVerificationKey();

$token = $config->getParser()->parse('eyJ0eNiJ9 (...)');
$constraints = [
new ConstraintIssuedBy('https://foo.bar', 'https://bar.foo'),
new ConstraintPermittedFor('https://client2.bar'),

new ConstraintValidAt(new SystemClock()),

new ConstraintSignedWith($signer, $key)

];



$config->getValidator()->assert($token, ...$constraints);
declare(strict_types=1);
use LcobucciClockSystemClock;

use LcobucciJWTValidationConstraint;
/** @var LcobucciJWTConfiguration $config */
$config = require 'config.php';
$signer = $config->getSigner();
$key = $config->getVerificationKey();

$token = $config->getParser()->parse('eyJ0eNiJ9 (...)');
$constraints = [
new ConstraintIssuedBy('https://foo.bar', 'https://bar.foo'),
new ConstraintPermittedFor('https://client2.bar'),

new ConstraintValidAt(new SystemClock()),

new ConstraintSignedWith($signer, $key)

];



var_dump($config->getValidator()->validate($token, ...$constraints));
It’s up to you!
https://goo.gl/vYG4zt
JWT
To infinity

& beyond!
authentication
Luís Cobucci

@lcobucci
https://goo.gl/gbd3H5
Thanks!
@lcobucci

Contenu connexe

Tendances

When NOT to use Apache Kafka?
When NOT to use Apache Kafka?When NOT to use Apache Kafka?
When NOT to use Apache Kafka?Kai Wähner
 
Understanding JWT Exploitation
Understanding JWT ExploitationUnderstanding JWT Exploitation
Understanding JWT ExploitationAkshaeyBhosale
 
ASP.NET Core MVC with EF Core code first
ASP.NET Core MVC with EF Core code firstASP.NET Core MVC with EF Core code first
ASP.NET Core MVC with EF Core code firstMd. Aftab Uddin Kajal
 
BigQuery의 모든 것(기획자, 마케터, 신입 데이터 분석가를 위한) 입문편
BigQuery의 모든 것(기획자, 마케터, 신입 데이터 분석가를 위한) 입문편BigQuery의 모든 것(기획자, 마케터, 신입 데이터 분석가를 위한) 입문편
BigQuery의 모든 것(기획자, 마케터, 신입 데이터 분석가를 위한) 입문편Seongyun Byeon
 
대용량 로그분석 Bigquery로 간단히 사용하기 20160930
대용량 로그분석 Bigquery로 간단히 사용하기 20160930대용량 로그분석 Bigquery로 간단히 사용하기 20160930
대용량 로그분석 Bigquery로 간단히 사용하기 20160930Jaikwang Lee
 
Introduction to jQuery
Introduction to jQueryIntroduction to jQuery
Introduction to jQueryZeeshan Khan
 
Non Relational Databases
Non Relational DatabasesNon Relational Databases
Non Relational DatabasesChris Baglieri
 
Letswift19-clean-architecture
Letswift19-clean-architectureLetswift19-clean-architecture
Letswift19-clean-architectureJung Kim
 
Documenting your REST API with Swagger - JOIN 2014
Documenting your REST API with Swagger - JOIN 2014Documenting your REST API with Swagger - JOIN 2014
Documenting your REST API with Swagger - JOIN 2014JWORKS powered by Ordina
 
[H3 2012] 오픈 소스로 구현하는 실시간 데이터 처리를 위한 CEP
[H3 2012] 오픈 소스로 구현하는 실시간 데이터 처리를 위한 CEP[H3 2012] 오픈 소스로 구현하는 실시간 데이터 처리를 위한 CEP
[H3 2012] 오픈 소스로 구현하는 실시간 데이터 처리를 위한 CEPKTH, 케이티하이텔
 
Introduction to Javascript
Introduction to JavascriptIntroduction to Javascript
Introduction to JavascriptAmit Tyagi
 
SignalR or RabbitMQ: Which is the better messaging tool?
SignalR or RabbitMQ: Which is the better messaging tool?SignalR or RabbitMQ: Which is the better messaging tool?
SignalR or RabbitMQ: Which is the better messaging tool?Tien Nguyen
 

Tendances (20)

DDD 준비 서문래
DDD 준비 서문래DDD 준비 서문래
DDD 준비 서문래
 
When NOT to use Apache Kafka?
When NOT to use Apache Kafka?When NOT to use Apache Kafka?
When NOT to use Apache Kafka?
 
Understanding JWT Exploitation
Understanding JWT ExploitationUnderstanding JWT Exploitation
Understanding JWT Exploitation
 
ASP.NET Core MVC with EF Core code first
ASP.NET Core MVC with EF Core code firstASP.NET Core MVC with EF Core code first
ASP.NET Core MVC with EF Core code first
 
BigQuery의 모든 것(기획자, 마케터, 신입 데이터 분석가를 위한) 입문편
BigQuery의 모든 것(기획자, 마케터, 신입 데이터 분석가를 위한) 입문편BigQuery의 모든 것(기획자, 마케터, 신입 데이터 분석가를 위한) 입문편
BigQuery의 모든 것(기획자, 마케터, 신입 데이터 분석가를 위한) 입문편
 
Html5 semantics
Html5 semanticsHtml5 semantics
Html5 semantics
 
Netflix conductor
Netflix conductorNetflix conductor
Netflix conductor
 
대용량 로그분석 Bigquery로 간단히 사용하기 20160930
대용량 로그분석 Bigquery로 간단히 사용하기 20160930대용량 로그분석 Bigquery로 간단히 사용하기 20160930
대용량 로그분석 Bigquery로 간단히 사용하기 20160930
 
Blazor
BlazorBlazor
Blazor
 
Introduction to jQuery
Introduction to jQueryIntroduction to jQuery
Introduction to jQuery
 
Non Relational Databases
Non Relational DatabasesNon Relational Databases
Non Relational Databases
 
Letswift19-clean-architecture
Letswift19-clean-architectureLetswift19-clean-architecture
Letswift19-clean-architecture
 
Json Web Token - JWT
Json Web Token - JWTJson Web Token - JWT
Json Web Token - JWT
 
Documenting your REST API with Swagger - JOIN 2014
Documenting your REST API with Swagger - JOIN 2014Documenting your REST API with Swagger - JOIN 2014
Documenting your REST API with Swagger - JOIN 2014
 
Kubernetes
Kubernetes Kubernetes
Kubernetes
 
[H3 2012] 오픈 소스로 구현하는 실시간 데이터 처리를 위한 CEP
[H3 2012] 오픈 소스로 구현하는 실시간 데이터 처리를 위한 CEP[H3 2012] 오픈 소스로 구현하는 실시간 데이터 처리를 위한 CEP
[H3 2012] 오픈 소스로 구현하는 실시간 데이터 처리를 위한 CEP
 
Restful api
Restful apiRestful api
Restful api
 
Introduction to Javascript
Introduction to JavascriptIntroduction to Javascript
Introduction to Javascript
 
SignalR or RabbitMQ: Which is the better messaging tool?
SignalR or RabbitMQ: Which is the better messaging tool?SignalR or RabbitMQ: Which is the better messaging tool?
SignalR or RabbitMQ: Which is the better messaging tool?
 
Angular
AngularAngular
Angular
 

En vedette

PHP UK 2017 - Don't Lose Sleep - Secure Your REST
PHP UK 2017 - Don't Lose Sleep - Secure Your RESTPHP UK 2017 - Don't Lose Sleep - Secure Your REST
PHP UK 2017 - Don't Lose Sleep - Secure Your RESTAdam Englander
 
Driving Design through Examples
Driving Design through ExamplesDriving Design through Examples
Driving Design through ExamplesCiaranMcNulty
 
Hopping in clouds - phpuk 17
Hopping in clouds - phpuk 17Hopping in clouds - phpuk 17
Hopping in clouds - phpuk 17Michele Orselli
 
Debugging Effectively - PHP UK 2017
Debugging Effectively - PHP UK 2017Debugging Effectively - PHP UK 2017
Debugging Effectively - PHP UK 2017Colin O'Dell
 
Enough suffering, fix your architecture!
Enough suffering, fix your architecture!Enough suffering, fix your architecture!
Enough suffering, fix your architecture!Luís Cobucci
 
SunshinePHP 2017 - Making the most out of MySQL
SunshinePHP 2017 - Making the most out of MySQLSunshinePHP 2017 - Making the most out of MySQL
SunshinePHP 2017 - Making the most out of MySQLGabriela Ferrara
 
My app is secure... I think
My app is secure... I thinkMy app is secure... I think
My app is secure... I thinkWim Godden
 
Docker for Developers - Sunshine PHP
Docker for Developers - Sunshine PHPDocker for Developers - Sunshine PHP
Docker for Developers - Sunshine PHPChris Tankersley
 
WordPress for the modern PHP developer
WordPress for the modern PHP developerWordPress for the modern PHP developer
WordPress for the modern PHP developerChris Sherry
 
Autenticação com Json Web Token (JWT)
Autenticação com Json Web Token (JWT)Autenticação com Json Web Token (JWT)
Autenticação com Json Web Token (JWT)Ivan Rosolen
 
Demystifying Object-Oriented Programming - PHP UK Conference 2017
Demystifying Object-Oriented Programming - PHP UK Conference 2017Demystifying Object-Oriented Programming - PHP UK Conference 2017
Demystifying Object-Oriented Programming - PHP UK Conference 2017Alena Holligan
 
Code Coverage for Total Security in Application Migrations
Code Coverage for Total Security in Application MigrationsCode Coverage for Total Security in Application Migrations
Code Coverage for Total Security in Application MigrationsDana Luther
 
Debugging Effectively - SunshinePHP 2017
Debugging Effectively - SunshinePHP 2017Debugging Effectively - SunshinePHP 2017
Debugging Effectively - SunshinePHP 2017Colin O'Dell
 
Dip Your Toes in the Sea of Security
Dip Your Toes in the Sea of SecurityDip Your Toes in the Sea of Security
Dip Your Toes in the Sea of SecurityJames Titcumb
 
A World Without PHP
A World Without PHPA World Without PHP
A World Without PHPBen Marks
 
Learn To Test Like A Grumpy Programmer - 3 hour workshop
Learn To Test Like A Grumpy Programmer - 3 hour workshopLearn To Test Like A Grumpy Programmer - 3 hour workshop
Learn To Test Like A Grumpy Programmer - 3 hour workshopchartjes
 
Integrating React.js with PHP projects
Integrating React.js with PHP projectsIntegrating React.js with PHP projects
Integrating React.js with PHP projectsIgnacio Martín
 
Amp your site: An intro to accelerated mobile pages
Amp your site: An intro to accelerated mobile pagesAmp your site: An intro to accelerated mobile pages
Amp your site: An intro to accelerated mobile pagesRobert McFrazier
 
A recommendation engine for your php application
A recommendation engine for your php applicationA recommendation engine for your php application
A recommendation engine for your php applicationMichele Orselli
 

En vedette (20)

PHP UK 2017 - Don't Lose Sleep - Secure Your REST
PHP UK 2017 - Don't Lose Sleep - Secure Your RESTPHP UK 2017 - Don't Lose Sleep - Secure Your REST
PHP UK 2017 - Don't Lose Sleep - Secure Your REST
 
Driving Design through Examples
Driving Design through ExamplesDriving Design through Examples
Driving Design through Examples
 
Hopping in clouds - phpuk 17
Hopping in clouds - phpuk 17Hopping in clouds - phpuk 17
Hopping in clouds - phpuk 17
 
Debugging Effectively - PHP UK 2017
Debugging Effectively - PHP UK 2017Debugging Effectively - PHP UK 2017
Debugging Effectively - PHP UK 2017
 
Drupal8 for Symfony Developers
Drupal8 for Symfony DevelopersDrupal8 for Symfony Developers
Drupal8 for Symfony Developers
 
Enough suffering, fix your architecture!
Enough suffering, fix your architecture!Enough suffering, fix your architecture!
Enough suffering, fix your architecture!
 
SunshinePHP 2017 - Making the most out of MySQL
SunshinePHP 2017 - Making the most out of MySQLSunshinePHP 2017 - Making the most out of MySQL
SunshinePHP 2017 - Making the most out of MySQL
 
My app is secure... I think
My app is secure... I thinkMy app is secure... I think
My app is secure... I think
 
Docker for Developers - Sunshine PHP
Docker for Developers - Sunshine PHPDocker for Developers - Sunshine PHP
Docker for Developers - Sunshine PHP
 
WordPress for the modern PHP developer
WordPress for the modern PHP developerWordPress for the modern PHP developer
WordPress for the modern PHP developer
 
Autenticação com Json Web Token (JWT)
Autenticação com Json Web Token (JWT)Autenticação com Json Web Token (JWT)
Autenticação com Json Web Token (JWT)
 
Demystifying Object-Oriented Programming - PHP UK Conference 2017
Demystifying Object-Oriented Programming - PHP UK Conference 2017Demystifying Object-Oriented Programming - PHP UK Conference 2017
Demystifying Object-Oriented Programming - PHP UK Conference 2017
 
Code Coverage for Total Security in Application Migrations
Code Coverage for Total Security in Application MigrationsCode Coverage for Total Security in Application Migrations
Code Coverage for Total Security in Application Migrations
 
Debugging Effectively - SunshinePHP 2017
Debugging Effectively - SunshinePHP 2017Debugging Effectively - SunshinePHP 2017
Debugging Effectively - SunshinePHP 2017
 
Dip Your Toes in the Sea of Security
Dip Your Toes in the Sea of SecurityDip Your Toes in the Sea of Security
Dip Your Toes in the Sea of Security
 
A World Without PHP
A World Without PHPA World Without PHP
A World Without PHP
 
Learn To Test Like A Grumpy Programmer - 3 hour workshop
Learn To Test Like A Grumpy Programmer - 3 hour workshopLearn To Test Like A Grumpy Programmer - 3 hour workshop
Learn To Test Like A Grumpy Programmer - 3 hour workshop
 
Integrating React.js with PHP projects
Integrating React.js with PHP projectsIntegrating React.js with PHP projects
Integrating React.js with PHP projects
 
Amp your site: An intro to accelerated mobile pages
Amp your site: An intro to accelerated mobile pagesAmp your site: An intro to accelerated mobile pages
Amp your site: An intro to accelerated mobile pages
 
A recommendation engine for your php application
A recommendation engine for your php applicationA recommendation engine for your php application
A recommendation engine for your php application
 

Similaire à JWT - To authentication and beyond!

Agile Testing Days 2018 - API Fundamentals - postman collection
Agile Testing Days 2018 - API Fundamentals - postman collectionAgile Testing Days 2018 - API Fundamentals - postman collection
Agile Testing Days 2018 - API Fundamentals - postman collectionJoEllen Carter
 
SFScon17 - Patrick Puecher: "Exploring data with Elasticsearch and Kibana"
SFScon17 - Patrick Puecher: "Exploring data with Elasticsearch and Kibana"SFScon17 - Patrick Puecher: "Exploring data with Elasticsearch and Kibana"
SFScon17 - Patrick Puecher: "Exploring data with Elasticsearch and Kibana"South Tyrol Free Software Conference
 
Browsers with Wings
Browsers with WingsBrowsers with Wings
Browsers with WingsRemy Sharp
 
HadoopとMongoDBを活用したソーシャルアプリのログ解析
HadoopとMongoDBを活用したソーシャルアプリのログ解析HadoopとMongoDBを活用したソーシャルアプリのログ解析
HadoopとMongoDBを活用したソーシャルアプリのログ解析Takahiro Inoue
 
Look Ma, “update DB to HTML5 using C++”, no hands! 
Look Ma, “update DB to HTML5 using C++”, no hands! Look Ma, “update DB to HTML5 using C++”, no hands! 
Look Ma, “update DB to HTML5 using C++”, no hands! aleks-f
 
Peggy elasticsearch應用
Peggy elasticsearch應用Peggy elasticsearch應用
Peggy elasticsearch應用LearningTech
 
The Testing Games: Mocking, yay!
The Testing Games: Mocking, yay!The Testing Games: Mocking, yay!
The Testing Games: Mocking, yay!Donny Wals
 
Eve - REST API for Humans™
Eve - REST API for Humans™Eve - REST API for Humans™
Eve - REST API for Humans™Nicola Iarocci
 
WordPressでIoTをはじめよう
WordPressでIoTをはじめようWordPressでIoTをはじめよう
WordPressでIoTをはじめようYuriko IKEDA
 
CouchDB @ red dirt ruby conference
CouchDB @ red dirt ruby conferenceCouchDB @ red dirt ruby conference
CouchDB @ red dirt ruby conferenceleinweber
 
Is HTML5 Ready? (workshop)
Is HTML5 Ready? (workshop)Is HTML5 Ready? (workshop)
Is HTML5 Ready? (workshop)Remy Sharp
 
Is html5-ready-workshop-110727181512-phpapp02
Is html5-ready-workshop-110727181512-phpapp02Is html5-ready-workshop-110727181512-phpapp02
Is html5-ready-workshop-110727181512-phpapp02PL dream
 
jq: JSON - Like a Boss
jq: JSON - Like a Bossjq: JSON - Like a Boss
jq: JSON - Like a BossBob Tiernay
 
Elasticsearch: You know, for search! and more!
Elasticsearch: You know, for search! and more!Elasticsearch: You know, for search! and more!
Elasticsearch: You know, for search! and more!Philips Kokoh Prasetyo
 
elasticsearch - advanced features in practice
elasticsearch - advanced features in practiceelasticsearch - advanced features in practice
elasticsearch - advanced features in practiceJano Suchal
 
GraphQL & Relay - 串起前後端世界的橋樑
GraphQL & Relay - 串起前後端世界的橋樑GraphQL & Relay - 串起前後端世界的橋樑
GraphQL & Relay - 串起前後端世界的橋樑Pokai Chang
 
MongoDB Aggregation
MongoDB Aggregation MongoDB Aggregation
MongoDB Aggregation Amit Ghosh
 
Symfony & Javascript. Combining the best of two worlds
Symfony & Javascript. Combining the best of two worldsSymfony & Javascript. Combining the best of two worlds
Symfony & Javascript. Combining the best of two worldsIgnacio Martín
 

Similaire à JWT - To authentication and beyond! (20)

Agile Testing Days 2018 - API Fundamentals - postman collection
Agile Testing Days 2018 - API Fundamentals - postman collectionAgile Testing Days 2018 - API Fundamentals - postman collection
Agile Testing Days 2018 - API Fundamentals - postman collection
 
SFScon17 - Patrick Puecher: "Exploring data with Elasticsearch and Kibana"
SFScon17 - Patrick Puecher: "Exploring data with Elasticsearch and Kibana"SFScon17 - Patrick Puecher: "Exploring data with Elasticsearch and Kibana"
SFScon17 - Patrick Puecher: "Exploring data with Elasticsearch and Kibana"
 
Books
BooksBooks
Books
 
Browsers with Wings
Browsers with WingsBrowsers with Wings
Browsers with Wings
 
HadoopとMongoDBを活用したソーシャルアプリのログ解析
HadoopとMongoDBを活用したソーシャルアプリのログ解析HadoopとMongoDBを活用したソーシャルアプリのログ解析
HadoopとMongoDBを活用したソーシャルアプリのログ解析
 
Look Ma, “update DB to HTML5 using C++”, no hands! 
Look Ma, “update DB to HTML5 using C++”, no hands! Look Ma, “update DB to HTML5 using C++”, no hands! 
Look Ma, “update DB to HTML5 using C++”, no hands! 
 
Peggy elasticsearch應用
Peggy elasticsearch應用Peggy elasticsearch應用
Peggy elasticsearch應用
 
The Testing Games: Mocking, yay!
The Testing Games: Mocking, yay!The Testing Games: Mocking, yay!
The Testing Games: Mocking, yay!
 
Eve - REST API for Humans™
Eve - REST API for Humans™Eve - REST API for Humans™
Eve - REST API for Humans™
 
WordPressでIoTをはじめよう
WordPressでIoTをはじめようWordPressでIoTをはじめよう
WordPressでIoTをはじめよう
 
CouchDB @ red dirt ruby conference
CouchDB @ red dirt ruby conferenceCouchDB @ red dirt ruby conference
CouchDB @ red dirt ruby conference
 
Is HTML5 Ready? (workshop)
Is HTML5 Ready? (workshop)Is HTML5 Ready? (workshop)
Is HTML5 Ready? (workshop)
 
Is html5-ready-workshop-110727181512-phpapp02
Is html5-ready-workshop-110727181512-phpapp02Is html5-ready-workshop-110727181512-phpapp02
Is html5-ready-workshop-110727181512-phpapp02
 
Data exchange formats
Data exchange formatsData exchange formats
Data exchange formats
 
jq: JSON - Like a Boss
jq: JSON - Like a Bossjq: JSON - Like a Boss
jq: JSON - Like a Boss
 
Elasticsearch: You know, for search! and more!
Elasticsearch: You know, for search! and more!Elasticsearch: You know, for search! and more!
Elasticsearch: You know, for search! and more!
 
elasticsearch - advanced features in practice
elasticsearch - advanced features in practiceelasticsearch - advanced features in practice
elasticsearch - advanced features in practice
 
GraphQL & Relay - 串起前後端世界的橋樑
GraphQL & Relay - 串起前後端世界的橋樑GraphQL & Relay - 串起前後端世界的橋樑
GraphQL & Relay - 串起前後端世界的橋樑
 
MongoDB Aggregation
MongoDB Aggregation MongoDB Aggregation
MongoDB Aggregation
 
Symfony & Javascript. Combining the best of two worlds
Symfony & Javascript. Combining the best of two worldsSymfony & Javascript. Combining the best of two worlds
Symfony & Javascript. Combining the best of two worlds
 

Dernier

Ahmed Motair CV April 2024 (Senior SW Developer)
Ahmed Motair CV April 2024 (Senior SW Developer)Ahmed Motair CV April 2024 (Senior SW Developer)
Ahmed Motair CV April 2024 (Senior SW Developer)Ahmed Mater
 
Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...
Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...
Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...OnePlan Solutions
 
Recruitment Management Software Benefits (Infographic)
Recruitment Management Software Benefits (Infographic)Recruitment Management Software Benefits (Infographic)
Recruitment Management Software Benefits (Infographic)Hr365.us smith
 
PREDICTING RIVER WATER QUALITY ppt presentation
PREDICTING  RIVER  WATER QUALITY  ppt presentationPREDICTING  RIVER  WATER QUALITY  ppt presentation
PREDICTING RIVER WATER QUALITY ppt presentationvaddepallysandeep122
 
A healthy diet for your Java application Devoxx France.pdf
A healthy diet for your Java application Devoxx France.pdfA healthy diet for your Java application Devoxx France.pdf
A healthy diet for your Java application Devoxx France.pdfMarharyta Nedzelska
 
What is Fashion PLM and Why Do You Need It
What is Fashion PLM and Why Do You Need ItWhat is Fashion PLM and Why Do You Need It
What is Fashion PLM and Why Do You Need ItWave PLM
 
Comparing Linux OS Image Update Models - EOSS 2024.pdf
Comparing Linux OS Image Update Models - EOSS 2024.pdfComparing Linux OS Image Update Models - EOSS 2024.pdf
Comparing Linux OS Image Update Models - EOSS 2024.pdfDrew Moseley
 
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024StefanoLambiase
 
Introduction Computer Science - Software Design.pdf
Introduction Computer Science - Software Design.pdfIntroduction Computer Science - Software Design.pdf
Introduction Computer Science - Software Design.pdfFerryKemperman
 
Software Coding for software engineering
Software Coding for software engineeringSoftware Coding for software engineering
Software Coding for software engineeringssuserb3a23b
 
Unveiling the Future: Sylius 2.0 New Features
Unveiling the Future: Sylius 2.0 New FeaturesUnveiling the Future: Sylius 2.0 New Features
Unveiling the Future: Sylius 2.0 New FeaturesŁukasz Chruściel
 
Powering Real-Time Decisions with Continuous Data Streams
Powering Real-Time Decisions with Continuous Data StreamsPowering Real-Time Decisions with Continuous Data Streams
Powering Real-Time Decisions with Continuous Data StreamsSafe Software
 
Folding Cheat Sheet #4 - fourth in a series
Folding Cheat Sheet #4 - fourth in a seriesFolding Cheat Sheet #4 - fourth in a series
Folding Cheat Sheet #4 - fourth in a seriesPhilip Schwarz
 
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...Natan Silnitsky
 
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...OnePlan Solutions
 
CRM Contender Series: HubSpot vs. Salesforce
CRM Contender Series: HubSpot vs. SalesforceCRM Contender Series: HubSpot vs. Salesforce
CRM Contender Series: HubSpot vs. SalesforceBrainSell Technologies
 
Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...
Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...
Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...confluent
 
How to submit a standout Adobe Champion Application
How to submit a standout Adobe Champion ApplicationHow to submit a standout Adobe Champion Application
How to submit a standout Adobe Champion ApplicationBradBedford3
 
Implementing Zero Trust strategy with Azure
Implementing Zero Trust strategy with AzureImplementing Zero Trust strategy with Azure
Implementing Zero Trust strategy with AzureDinusha Kumarasiri
 

Dernier (20)

Ahmed Motair CV April 2024 (Senior SW Developer)
Ahmed Motair CV April 2024 (Senior SW Developer)Ahmed Motair CV April 2024 (Senior SW Developer)
Ahmed Motair CV April 2024 (Senior SW Developer)
 
Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...
Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...
Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...
 
Odoo Development Company in India | Devintelle Consulting Service
Odoo Development Company in India | Devintelle Consulting ServiceOdoo Development Company in India | Devintelle Consulting Service
Odoo Development Company in India | Devintelle Consulting Service
 
Recruitment Management Software Benefits (Infographic)
Recruitment Management Software Benefits (Infographic)Recruitment Management Software Benefits (Infographic)
Recruitment Management Software Benefits (Infographic)
 
PREDICTING RIVER WATER QUALITY ppt presentation
PREDICTING  RIVER  WATER QUALITY  ppt presentationPREDICTING  RIVER  WATER QUALITY  ppt presentation
PREDICTING RIVER WATER QUALITY ppt presentation
 
A healthy diet for your Java application Devoxx France.pdf
A healthy diet for your Java application Devoxx France.pdfA healthy diet for your Java application Devoxx France.pdf
A healthy diet for your Java application Devoxx France.pdf
 
What is Fashion PLM and Why Do You Need It
What is Fashion PLM and Why Do You Need ItWhat is Fashion PLM and Why Do You Need It
What is Fashion PLM and Why Do You Need It
 
Comparing Linux OS Image Update Models - EOSS 2024.pdf
Comparing Linux OS Image Update Models - EOSS 2024.pdfComparing Linux OS Image Update Models - EOSS 2024.pdf
Comparing Linux OS Image Update Models - EOSS 2024.pdf
 
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
 
Introduction Computer Science - Software Design.pdf
Introduction Computer Science - Software Design.pdfIntroduction Computer Science - Software Design.pdf
Introduction Computer Science - Software Design.pdf
 
Software Coding for software engineering
Software Coding for software engineeringSoftware Coding for software engineering
Software Coding for software engineering
 
Unveiling the Future: Sylius 2.0 New Features
Unveiling the Future: Sylius 2.0 New FeaturesUnveiling the Future: Sylius 2.0 New Features
Unveiling the Future: Sylius 2.0 New Features
 
Powering Real-Time Decisions with Continuous Data Streams
Powering Real-Time Decisions with Continuous Data StreamsPowering Real-Time Decisions with Continuous Data Streams
Powering Real-Time Decisions with Continuous Data Streams
 
Folding Cheat Sheet #4 - fourth in a series
Folding Cheat Sheet #4 - fourth in a seriesFolding Cheat Sheet #4 - fourth in a series
Folding Cheat Sheet #4 - fourth in a series
 
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...
 
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...
 
CRM Contender Series: HubSpot vs. Salesforce
CRM Contender Series: HubSpot vs. SalesforceCRM Contender Series: HubSpot vs. Salesforce
CRM Contender Series: HubSpot vs. Salesforce
 
Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...
Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...
Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...
 
How to submit a standout Adobe Champion Application
How to submit a standout Adobe Champion ApplicationHow to submit a standout Adobe Champion Application
How to submit a standout Adobe Champion Application
 
Implementing Zero Trust strategy with Azure
Implementing Zero Trust strategy with AzureImplementing Zero Trust strategy with Azure
Implementing Zero Trust strategy with Azure
 

JWT - To authentication and beyond!