@@ -8,6 +8,7 @@ public enum InvalidToken : Printable {
8
8
case ExpiredSignature
9
9
case ImmatureSignature
10
10
case InvalidIssuedAt
11
+ case InvalidAudience
11
12
12
13
public var description : String {
13
14
switch self {
@@ -21,6 +22,8 @@ public enum InvalidToken : Printable {
21
22
return " The token is not yet valid (not before claim) "
22
23
case . InvalidIssuedAt:
23
24
return " Issued at claim (iat) is in the future "
25
+ case InvalidAudience:
26
+ return " Invalid Audience "
24
27
}
25
28
}
26
29
}
@@ -111,6 +114,24 @@ func load(jwt:String) -> LoadResult {
111
114
112
115
// MARK: Validation
113
116
117
+ func validateAudience( payload: Payload , audience: String ? ) -> InvalidToken ? {
118
+ if let audience = audience {
119
+ if let aud = payload [ " aud " ] as? [ String ] {
120
+ if !contains( aud, audience) {
121
+ return . InvalidAudience
122
+ }
123
+ } else if let aud = payload [ " aud " ] as? String {
124
+ if aud != audience {
125
+ return . InvalidAudience
126
+ }
127
+ } else {
128
+ return . DecodeError( " Invalid audience claim, must be a string or an array of strings " )
129
+ }
130
+ }
131
+
132
+ return nil
133
+ }
134
+
114
135
func validateIssuer( payload: Payload , issuer: String ? ) -> InvalidToken ? {
115
136
if let issuer = issuer {
116
137
if let iss = payload [ " iss " ] as? String {
@@ -139,7 +160,7 @@ func validateDate(payload:Payload, key:String, comparison:NSComparisonResult, fa
139
160
}
140
161
141
162
func validateClaims( payload: Payload , audience: String ? , issuer: String ? ) -> InvalidToken ? {
142
- return validateIssuer ( payload, issuer) ??
163
+ return validateIssuer ( payload, issuer) ?? validateAudience ( payload , audience ) ??
143
164
validateDate ( payload, " exp " , . OrderedAscending, . ExpiredSignature, " Expiration time claim (exp) must be an integer " ) ??
144
165
validateDate ( payload, " nbf " , . OrderedDescending, . ImmatureSignature, " Not before claim (nbf) must be an integer " ) ??
145
166
validateDate ( payload, " iat " , . OrderedDescending, . InvalidIssuedAt, " Issued at claim (iat) must be an integer " )
0 commit comments