File tree 5 files changed +56
-9
lines changed
LogtoClientTests/LogtoClient
5 files changed +56
-9
lines changed Original file line number Diff line number Diff line change @@ -46,7 +46,7 @@ public extension LogtoCore {
46
46
struct CodeTokenResponse : Codable , Equatable {
47
47
public let accessToken : String
48
48
public let refreshToken : String ?
49
- public let idToken : String
49
+ public let idToken : String ?
50
50
public let scope : String
51
51
public let expiresIn : Int64
52
52
}
@@ -80,7 +80,7 @@ public extension LogtoCore {
80
80
81
81
struct RefreshTokenTokenResponse : Codable , Equatable {
82
82
public let accessToken : String
83
- public let refreshToken : String
83
+ public let refreshToken : String ?
84
84
public let idToken : String ?
85
85
public let scope : String
86
86
public let expiresIn : Int64
Original file line number Diff line number Diff line change @@ -34,7 +34,10 @@ extension LogtoClient {
34
34
)
35
35
36
36
accessTokenMap [ key] = accessToken
37
- self . refreshToken = response. refreshToken
37
+
38
+ response. refreshToken. map {
39
+ self . refreshToken = $0
40
+ }
38
41
39
42
response. idToken. map {
40
43
self . idToken = $0
Original file line number Diff line number Diff line change @@ -30,12 +30,14 @@ extension LogtoClient {
30
30
let response = try await session. start ( )
31
31
let jwks = try await fetchJwkSet ( )
32
32
33
- try LogtoUtilities . verifyIdToken (
34
- response. idToken,
35
- issuer: oidcConfig. issuer,
36
- clientId: logtoConfig. appId,
37
- jwks: jwks
38
- )
33
+ try response. idToken. map {
34
+ try LogtoUtilities . verifyIdToken (
35
+ $0,
36
+ issuer: oidcConfig. issuer,
37
+ clientId: logtoConfig. appId,
38
+ jwks: jwks
39
+ )
40
+ }
39
41
40
42
idToken = response. idToken
41
43
refreshToken = response. refreshToken
Original file line number Diff line number Diff line change @@ -51,6 +51,27 @@ extension LogtoClientTests {
51
51
52
52
XCTAssertEqual ( tokens [ 0 ] , " 123 " )
53
53
XCTAssertEqual ( tokens [ 1 ] , " 456 " )
54
+ XCTAssertEqual ( client. refreshToken, " 789 " )
55
+ XCTAssertEqual ( client. idToken, " abc " )
56
+ }
57
+
58
+ func testGetAccessTokenByRefreshTokenWithoutRefreshAndIdTokenReturned( ) async throws {
59
+ NetworkSessionMock . shared. tokenRequestCount = 0
60
+
61
+ let client = buildClient ( withOidcEndpoint: " /oidc_config:good:no_refresh " )
62
+ client. idToken = " baz "
63
+ client. refreshToken = " bar "
64
+ client. accessTokenMap [ client. buildAccessTokenKey ( for: " resource1 " ) ] = AccessToken (
65
+ token: " foo " ,
66
+ scope: " " ,
67
+ expiresAt: Date ( ) . timeIntervalSince1970 - 1
68
+ )
69
+
70
+ let token = try await client. getAccessToken ( for: " resource1 " )
71
+
72
+ XCTAssertEqual ( token, " 123 " )
73
+ XCTAssertEqual ( client. refreshToken, " bar " )
74
+ XCTAssertEqual ( client. idToken, " baz " )
54
75
}
55
76
56
77
func testGetAccessTokenUnalbeToFetchOidcConfig( ) async throws {
Original file line number Diff line number Diff line change @@ -33,6 +33,18 @@ public class NetworkSessionMock: NetworkSession {
33
33
" issuer " : " http://localhost:443/oidc "
34
34
}
35
35
""" . utf8) , nil )
36
+ case " oidc_config:good:no_refresh " :
37
+ return ( Data ( """
38
+ {
39
+ " authorization_endpoint " : " https://logto.dev/auth:good " ,
40
+ " token_endpoint " : " https://logto.dev/token:good:no_refresh " ,
41
+ " end_session_endpoint " : " https://logto.dev/end:good " ,
42
+ " revocation_endpoint " : " https://logto.dev/revoke:good " ,
43
+ " userinfo_endpoint " : " https://logto.dev/user " ,
44
+ " jwks_uri " : " https://logto.dev/jwks:good " ,
45
+ " issuer " : " http://localhost:443/oidc "
46
+ }
47
+ """ . utf8) , nil )
36
48
case " oidc_config:bad " :
37
49
return ( Data ( """
38
50
{
@@ -86,6 +98,15 @@ public class NetworkSessionMock: NetworkSession {
86
98
" expires_in " : 123
87
99
}
88
100
""" . utf8) , nil )
101
+ case " token:good:no_refresh " :
102
+ return ( Data ( """
103
+ {
104
+ " access_token " : " 123 " ,
105
+ " token_type " : " jwt " ,
106
+ " scope " : " " ,
107
+ " expires_in " : 123
108
+ }
109
+ """ . utf8) , nil )
89
110
case " revoke:good " :
90
111
return ( nil , nil )
91
112
default :
You can’t perform that action at this time.
0 commit comments