|
1 | 1 | import Foundation
|
2 | 2 |
|
3 |
| -func validateClaims(_ payload:Payload, audience:String?, issuer:String?) throws { |
| 3 | +func validateClaims(_ payload: Payload, audience: String?, issuer: String?) throws { |
4 | 4 | try validateIssuer(payload, issuer: issuer)
|
5 | 5 | try validateAudience(payload, audience: audience)
|
6 | 6 | try validateDate(payload, key: "exp", comparison: .orderedAscending, failure: .expiredSignature, decodeError: "Expiration time claim (exp) must be an integer")
|
7 | 7 | try validateDate(payload, key: "nbf", comparison: .orderedDescending, failure: .immatureSignature, decodeError: "Not before claim (nbf) must be an integer")
|
8 | 8 | try validateDate(payload, key: "iat", comparison: .orderedDescending, failure: .invalidIssuedAt, decodeError: "Issued at claim (iat) must be an integer")
|
9 | 9 | }
|
10 | 10 |
|
11 |
| -func validateAudience(_ payload:Payload, audience:String?) throws { |
12 |
| - if let audience = audience { |
13 |
| - if let aud = payload["aud"] as? [String] { |
14 |
| - if !aud.contains(audience) { |
15 |
| - throw InvalidToken.invalidAudience |
16 |
| - } |
17 |
| - } else if let aud = payload["aud"] as? String { |
18 |
| - if aud != audience { |
19 |
| - throw InvalidToken.invalidAudience |
20 |
| - } |
21 |
| - } else { |
22 |
| - throw InvalidToken.decodeError("Invalid audience claim, must be a string or an array of strings") |
| 11 | +func validateAudience(_ payload: Payload, audience: String?) throws { |
| 12 | + guard let audience = audience else { |
| 13 | + return |
| 14 | + } |
| 15 | + |
| 16 | + if let aud = payload["aud"] as? [String] { |
| 17 | + if !aud.contains(audience) { |
| 18 | + throw InvalidToken.invalidAudience |
| 19 | + } |
| 20 | + } else if let aud = payload["aud"] as? String { |
| 21 | + if aud != audience { |
| 22 | + throw InvalidToken.invalidAudience |
23 | 23 | }
|
| 24 | + } else { |
| 25 | + throw InvalidToken.decodeError("Invalid audience claim, must be a string or an array of strings") |
24 | 26 | }
|
25 | 27 | }
|
26 | 28 |
|
27 |
| -func validateIssuer(_ payload:Payload, issuer:String?) throws { |
| 29 | +func validateIssuer(_ payload: Payload, issuer: String?) throws { |
28 | 30 | if let issuer = issuer {
|
29 | 31 | if let iss = payload["iss"] as? String {
|
30 | 32 | if iss != issuer {
|
|
0 commit comments