uniface lectures webinar - application & infrastructure security - json web tokens

30

Upload: uniface

Post on 23-Jan-2018

187 views

Category:

Software


5 download

TRANSCRIPT

Page 1: Uniface Lectures Webinar - Application & Infrastructure Security - JSON Web Tokens
Page 2: Uniface Lectures Webinar - Application & Infrastructure Security - JSON Web Tokens

Application & Infrastructure Security:

JSON Web Tokens

Thomas S Shore III

Uniface SME

Page 3: Uniface Lectures Webinar - Application & Infrastructure Security - JSON Web Tokens

Agenda

The JWT standard

Applying JWT to Uniface

Uniface technology to support JWT

Sample application of JWT

And more...

Page 4: Uniface Lectures Webinar - Application & Infrastructure Security - JSON Web Tokens

What’s the problem?

AuthenticationSAML2 – Think single sign on / sign out (NTLM)

Oauth – Google, Facebook etc

Open ID – 3rd party login system

Information SharingTrusted

Not complex

Multi-client

Page 5: Uniface Lectures Webinar - Application & Infrastructure Security - JSON Web Tokens

SAML 2

<samlp:AuthnRequest xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol" xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion" ID="pfx41d8ef22-e612-8c50-9960-1b16f15741b3" Version="2.0" ProviderName="SP test" IssueInstant="2014-07-16T23:52:45Z" Destination="http://idp.example.com/SSOService.php" ProtocolBinding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" AssertionConsumerServiceURL="http://sp.example.com/demo1/index.php?acs">

<saml:Issuer>http://sp.example.com/demo1/metadata.php</saml:Issuer><ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#">

<ds:SignedInfo><ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/><ds:SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/><ds:Reference URI="#pfx41d8ef22-e612-8c50-9960-1b16f15741b3">

<ds:Transforms><ds:Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/><ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>

</ds:Transforms><ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/><ds:DigestValue>yJN6cXUwQxTmMEsPesBP2NkqYFI=</ds:DigestValue>

</ds:Reference></ds:SignedInfo>

<ds:SignatureValue>g5eM9yPnKsmmE/Kh2qS7nfK8HoF6yHrAdNQxh70kh8pRI4KaNbYNOL9sF8F57Yd+jO6iNga8nnbwhbATKGXIZOJJSugXGAMRyZsj/rqngwTJk5KmujbqouR1SLFsbo7Iuwze933EgefBbAE4JRI7V2aD9YgmB3socPqAi2Qf97E=</ds:SignatureValue>

<ds:KeyInfo><ds:X509Data>

<ds:X509Certificate>MIICajCCAdOgAwIBAgIBADANBgkqhkiG9w0BAQQFADBSMQswCQYDVQQGEwJ1czETMBEGA1UECAwKQ2FsaWZvcm5pYTEVMBMGA1UECgwMT25lbG9naW4gSW5jMRcwFQYDVQQDDA5zcC5leGFtcGxlLmNvbTAeFw0xNDA3MTcwMDI5MjdaFw0xNTA3MTcwMDI5MjdaMFIxCzAJBgNVBAYTAnVzMRMwEQYDVQQIDApDYWxpZm9ybmlhMRUwEwYDVQQKDAxPbmVsb2dpbiBJbmMxFzAVBgNVBAMMDnNwLmV4YW1wbGUuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC7vU/6R/OBA6BKsZH4L2bIQ2cqBO7/aMfPjUPJPSn59d/f0aRqSC58YYrPuQODydUABiCknOn9yV0fEYm4bNvfjroTEd8bDlqo5oAXAUAI8XHPppJNz7pxbhZW0u35q45PJzGM9nCv9bglDQYJLby1ZUdHsSiDIpMbGgf/ZrxqawIDAQABo1AwTjAdBgNVHQ4EFgQU3s2NEpYx7wH6bq7xJFKa46jBDf4wHwYDVR0jBBgwFoAU3s2NEpYx7wH6bq7xJFKa46jBDf4wDAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQQFAAOBgQCPsNO2FG+zmk5miXEswAs30E14rBJpe/64FBpM1rPzOleexvMgZlr0/smF3P5TWb7H8Fy5kEiByxMjaQmml/nQx6qgVVzdhaTANpIE1ywEzVJlhdvw4hmRuEKYqTaFMLez0sRL79LUeDxPWw7Mj9FkpRYT+kAGiFomHop1nErV6Q==</ds:X509Certificate>

</ds:X509Data></ds:KeyInfo>

</ds:Signature><samlp:NameIDPolicy Format="urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress" AllowCreate="true"/><samlp:RequestedAuthnContext Comparison="exact">

<saml:AuthnContextClassRef>urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport</saml:AuthnContextClassRef></samlp:RequestedAuthnContext>

</samlp:AuthnRequest>

Security Assertion Markup Language 2.0 (SAML 2.0) is a version of the SAML standard for exchanging authentication and authorization data between security domains.(WikiPedia)

Page 6: Uniface Lectures Webinar - Application & Infrastructure Security - JSON Web Tokens

OAuth2

Complex

Authorization

No need to share a password

Sharing between sites if required

Allows Internet users to grant websites or applications access to their information on other websites but without giving them the passwords

Page 7: Uniface Lectures Webinar - Application & Infrastructure Security - JSON Web Tokens

Open ID

Federated Authentication

No sharing of data between providers/consumers

Allows users to be authenticated by co-operating sites (known as Relying Parties or RP) using a third party service.

Page 8: Uniface Lectures Webinar - Application & Infrastructure Security - JSON Web Tokens

Why should/do you care about this?

Web standards

Industry standard communication

Other technologies expect this!

Uniface is web aware and capable

There is no “out of the box” statement for this anywhere

Page 9: Uniface Lectures Webinar - Application & Infrastructure Security - JSON Web Tokens

What is JWT

JWTs represent a set of claims as a JSON object that is

encoded in a JWS and/or JWE structure. https://tools.ietf.org/html/rfc7519

Page 10: Uniface Lectures Webinar - Application & Infrastructure Security - JSON Web Tokens

Or from it’s original text

JSON Web Token (JWT) is a compact claims representation format intended

for space constrained environments such as HTTP Authorization headers and URI

query parameters. JWTs encode claims to be transmitted as a JSON [RFC7159]

object that is used as the payload of a JSON Web Signature (JWS) [JWS]

structure or as the plaintext of a JSON Web Encryption (JWE) [JWE]

structure, enabling the claims to be digitally signed or integrity protected with a

Message Authentication Code (MAC) and/or encrypted. JWTs are always

represented using the JWS Compact Serialization or the JWE Compact

Serialization. The suggested pronunciation of JWT is the same as the English

word "jot".

Original Klingon Text

Page 11: Uniface Lectures Webinar - Application & Infrastructure Security - JSON Web Tokens

Or English

JSON Web Token (JWT) is a compact claims representation format intended

for space constrained environments such as HTTP Authorization headers

and URI query parameters. JWTs encode claims to be transmitted as a

JSON [RFC7159] object that is used as the payload of a JSON Web

Signature (JWS) [JWS] structure or as the plaintext of a JSON Web

Encryption (JWE) [JWE] structure, enabling the claims to be digitally signed

or integrity protected with a Message Authentication Code (MAC) and/or

encrypted. JWTs are always represented using the JWS Compact

Serialization or the JWE Compact Serialization. The suggested pronunciation

of JWT is the same as the English word "jot".

Page 12: Uniface Lectures Webinar - Application & Infrastructure Security - JSON Web Tokens

What’s a Claim (from Dictionary.com)

Noun

6. a demand for something as due; an assertion of a right

or an alleged right:He made unreasonable claims on the doctor's time.

7. an assertion of something as a fact:He made no claims to originality.

Page 13: Uniface Lectures Webinar - Application & Infrastructure Security - JSON Web Tokens

It’s like a medicine bottle

Somewhat tamper-

proof

Labeled contents

Can be traced

I know who

prescribed it

I can see what’s in it

I know who filled it

I know when it is

expired

Page 14: Uniface Lectures Webinar - Application & Infrastructure Security - JSON Web Tokens

How might this work?

{ "iss" : "CVS\\/pharmacy","iat" : 1505908083,"exp" : 1537444083,"aud" : "Patient Name","sub" : "Happy Pills","jti" : "RX# 000000","quantity" : "30"

}

eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJDVlMvcGhhcm1hY3kiLCJpYXQiOjE1MDU5MDgwODMsImV4cCI6MTUzNzQ0NDA4MywiYXVkIjoiUGF0aWVudCBOYW1lIiwic3ViIjoiSGFwcHkgUGlsbHMiLCJqdGkiOiJSWCMgMDAwMDAwIiwicXVhbnRpdHkiOiIzMCJ9.ogrVq53XPuc77ffThZnej-DgDIfHEt1bgnsHh9_JZuU

Page 15: Uniface Lectures Webinar - Application & Infrastructure Security - JSON Web Tokens

So what does it look like?

Header.Payload.Signature

Signature = Encrypted Header.Payload

Page 16: Uniface Lectures Webinar - Application & Infrastructure Security - JSON Web Tokens

Here’s what we have

Page 17: Uniface Lectures Webinar - Application & Infrastructure Security - JSON Web Tokens

JWS – JSON Web Signature{

“typ”: “JWT”

“alg”:”HS256”

}

It’s a JSON Web Token (typ)

It’s encoded using the HMAC SHA-256 algorithm

Security Problem: alg set to none

Page 18: Uniface Lectures Webinar - Application & Infrastructure Security - JSON Web Tokens

Unsecured JWT

An Unsecured

JWT is a JWS using the "alg" Header Parameter value "none" and with

the empty string for its JWS Signature value, as defined in the JWA

specification [JWA]; it is an Unsecured JWS with the JWT Claims Set

as its JWS Payload.

So send me your JWT and I’ll modify the algorithm to “none” and I can change anything I want and it will be ok?

Page 19: Uniface Lectures Webinar - Application & Infrastructure Security - JSON Web Tokens

JWT Claims Set

Registered Claim NamesRegistered with IANA (www.iana.org)

o Claim Name: "iss"

o Claim Description: Issuer

o Change Controller: IESG

o Specification Document(s): Section 4.1.1 of RFC 7519

Private Claim Names

Must be unique

Page 20: Uniface Lectures Webinar - Application & Infrastructure Security - JSON Web Tokens

Registered Claims

Claim Name Description

iss Issuer

sub Subject

aud Audience

exp Expiration Date time (Unix epoch)

nbf Not before time (Unix epoch)

Iat Issued at

jti JWT ID

The jti (JWT ID) claim provides a unique identifier for the JWT. The identifier value MUST be assigned in a manner that ensures that there is a negligible probability that the same value will be accidentally assigned to a different data object. The jti claim can be used to prevent the JWT from being replayed. The jti value is case sensitive. This claim is OPTIONAL.

Page 21: Uniface Lectures Webinar - Application & Infrastructure Security - JSON Web Tokens

Validating a JWT

It has at least one period (‘.’)

JOSE Header is on the left

BASE 64 Encoded without carriage control or

whitespace

Header.Payload.Signature

Signature = Encrypted Header.Payload

Page 22: Uniface Lectures Webinar - Application & Infrastructure Security - JSON Web Tokens

JWT Libraries

.Net

Python

Node.js

Java

Javascript

Perl

Ruby

Elixir

Go

Haskell

Rust

Lua

Scala

D

Clojure

Objective-C

Swift

C

Kdb+/Q

Delphi

PHP

Crystal

1C

Where’s Uniface?

Page 23: Uniface Lectures Webinar - Application & Infrastructure Security - JSON Web Tokens

But no Uniface

We have all the technology in the product to create and

consume JSON Web Tokens

1. JSON creation

2. BASE64 encoding/decoding

3. HMAC_SHA256 Encryption

4. Manipulating Web Headers

Page 24: Uniface Lectures Webinar - Application & Infrastructure Security - JSON Web Tokens

Basic Operation

Uniface Web Application

Uniface Web ApplicationBrowserBrowser

Navigate to Web Application

Redirect to JWT Login Page

User enters valid username and password

Login ComponentLogin Component

Security Token Returned

Application Checks Token verifying expiration etc

Session verified Session Token added etc

JWT ComponentJWT Component

Request JWT Creation

Page 25: Uniface Lectures Webinar - Application & Infrastructure Security - JSON Web Tokens

Uniface particulars

Encode / Decode – BASE64

$encode(BASE64, source)

Encode HMAC_SHA256

$encode(HMAC_SHA256, source, security_key)

Page 26: Uniface Lectures Webinar - Application & Infrastructure Security - JSON Web Tokens

Sample Login

Page 27: Uniface Lectures Webinar - Application & Infrastructure Security - JSON Web Tokens

JWT Tester

Page 28: Uniface Lectures Webinar - Application & Infrastructure Security - JSON Web Tokens

DemoTime

Page 29: Uniface Lectures Webinar - Application & Infrastructure Security - JSON Web Tokens

Where is the stuff?

It will be placed on GitHub.com/uniface and possibly

uniface.info in the community samples area.

Page 30: Uniface Lectures Webinar - Application & Infrastructure Security - JSON Web Tokens

Thank You

& Questions