-
-
Notifications
You must be signed in to change notification settings - Fork 109
/
claims.go
80 lines (62 loc) · 2.17 KB
/
claims.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
// Copyright © 2023 Ory Corp
// SPDX-License-Identifier: Apache-2.0
package jwtx
import (
"time"
"github.com/pkg/errors"
"github.com/ory/x/mapx"
)
// Claims represents a JSON Web Token's standard claims.
type Claims struct {
// Audience identifies the recipients that the JWT is intended for.
Audience []string `json:"aud"`
// Issuer identifies the principal that issued the JWT.
Issuer string `json:"iss"`
// Subject identifies the principal that is the subject of the JWT.
Subject string `json:"sub"`
// ExpiresAt identifies the expiration time on or after which the JWT most not be accepted for processing.
ExpiresAt time.Time `json:"exp"`
// IssuedAt identifies the time at which the JWT was issued.
IssuedAt time.Time `json:"iat"`
// NotBefore identifies the time before which the JWT must not be accepted for processing.
NotBefore time.Time `json:"nbf"`
// JTI provides a unique identifier for the JWT.
JTI string `json:"jti"`
}
// ParseMapStringInterfaceClaims converts map[string]interface{} to *Claims.
func ParseMapStringInterfaceClaims(claims map[string]interface{}) *Claims {
c := make(map[interface{}]interface{})
for k, v := range claims {
c[k] = v
}
return ParseMapInterfaceInterfaceClaims(c)
}
// ParseMapInterfaceInterfaceClaims converts map[interface{}]interface{} to *Claims.
func ParseMapInterfaceInterfaceClaims(claims map[interface{}]interface{}) *Claims {
result := &Claims{
Issuer: mapx.GetStringDefault(claims, "iss", ""),
Subject: mapx.GetStringDefault(claims, "sub", ""),
JTI: mapx.GetStringDefault(claims, "jti", ""),
}
if aud, err := mapx.GetString(claims, "aud"); err == nil {
result.Audience = []string{aud}
} else if errors.Cause(err) == mapx.ErrKeyCanNotBeTypeAsserted {
if aud, err := mapx.GetStringSlice(claims, "aud"); err == nil {
result.Audience = aud
} else {
result.Audience = []string{}
}
} else {
result.Audience = []string{}
}
if exp, err := mapx.GetTime(claims, "exp"); err == nil {
result.ExpiresAt = exp
}
if iat, err := mapx.GetTime(claims, "iat"); err == nil {
result.IssuedAt = iat
}
if nbf, err := mapx.GetTime(claims, "nbf"); err == nil {
result.NotBefore = nbf
}
return result
}