File tree Expand file tree Collapse file tree 5 files changed +56
-9
lines changed
LogtoClientTests/LogtoClient Expand file tree Collapse file tree 5 files changed +56
-9
lines changed Original file line number Diff line number Diff line change @@ -46,7 +46,7 @@ public extension LogtoCore {
4646 struct CodeTokenResponse : Codable , Equatable {
4747 public let accessToken : String
4848 public let refreshToken : String ?
49- public let idToken : String
49+ public let idToken : String ?
5050 public let scope : String
5151 public let expiresIn : Int64
5252 }
@@ -80,7 +80,7 @@ public extension LogtoCore {
8080
8181 struct RefreshTokenTokenResponse : Codable , Equatable {
8282 public let accessToken : String
83- public let refreshToken : String
83+ public let refreshToken : String ?
8484 public let idToken : String ?
8585 public let scope : String
8686 public let expiresIn : Int64
Original file line number Diff line number Diff line change @@ -34,7 +34,10 @@ extension LogtoClient {
3434 )
3535
3636 accessTokenMap [ key] = accessToken
37- self . refreshToken = response. refreshToken
37+
38+ response. refreshToken. map {
39+ self . refreshToken = $0
40+ }
3841
3942 response. idToken. map {
4043 self . idToken = $0
Original file line number Diff line number Diff line change @@ -30,12 +30,14 @@ extension LogtoClient {
3030 let response = try await session. start ( )
3131 let jwks = try await fetchJwkSet ( )
3232
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+ }
3941
4042 idToken = response. idToken
4143 refreshToken = response. refreshToken
Original file line number Diff line number Diff line change @@ -51,6 +51,27 @@ extension LogtoClientTests {
5151
5252 XCTAssertEqual ( tokens [ 0 ] , " 123 " )
5353 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 " )
5475 }
5576
5677 func testGetAccessTokenUnalbeToFetchOidcConfig( ) async throws {
Original file line number Diff line number Diff line change @@ -33,6 +33,18 @@ public class NetworkSessionMock: NetworkSession {
3333 " issuer " : " http://localhost:443/oidc "
3434 }
3535 """ . 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 )
3648 case " oidc_config:bad " :
3749 return ( Data ( """
3850 {
@@ -86,6 +98,15 @@ public class NetworkSessionMock: NetworkSession {
8698 " expires_in " : 123
8799 }
88100 """ . 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 )
89110 case " revoke:good " :
90111 return ( nil , nil )
91112 default :
You can’t perform that action at this time.
0 commit comments