mirror of
https://github.com/logto-io/logto.git
synced 2025-03-10 22:22:45 -05:00
docs: add zh-CN Swift SDK reference (#602)
* docs: add zh-CN Swift SDK reference * fix: typo
This commit is contained in:
parent
bfececcfe5
commit
4945995e6e
56 changed files with 1316 additions and 24 deletions
|
@ -49,7 +49,7 @@ static func fetchToken(
|
|||
```
|
||||
|
||||
Fetch token by `authorization_code`.
|
||||
The returned `access_token` is only for user info enpoint.
|
||||
The returned `access_token` is only for [UserInfo Endpoint](https://openid.net/specs/openid-connect-core-1_0.html#UserInfo).
|
||||
Note the function will NOT validate any token in the response.
|
||||
|
||||
### `fetchToken(useSession:byRefreshToken:tokenEndpoint:clientId:resource:scopes:)`
|
||||
|
|
|
@ -38,14 +38,13 @@ static func decodeIdToken(_ idToken: String) throws -> IdTokenClaims
|
|||
```
|
||||
|
||||
Decode ID Token claims WITHOUT validation.
|
||||
- Parameter token: The JWT to decode
|
||||
- Returns: A set of ID Token claims
|
||||
- Returns: A set of ID Token claims.
|
||||
|
||||
#### Parameters
|
||||
|
||||
| Name | Description |
|
||||
| ---- | ----------- |
|
||||
| token | The JWT to decode |
|
||||
| token | The JWT to decode. |
|
||||
|
||||
### `verifyIdToken(_:issuer:clientId:jwks:forTimeInterval:)`
|
||||
|
||||
|
|
|
@ -63,10 +63,6 @@ Post a notification that tells Logto clients to handle the given URL.
|
|||
|
||||
Usually this function need to be called in `onOpenURL(perform:)` in SwiftUI or `application(_:open:options:)` in AppDelegate. See integration guide for detailed information.
|
||||
|
||||
- Parameters:
|
||||
- forClientId: If the notification is for specific client ID only. When `nil`, all Logto clients will try to handle the notification.
|
||||
- url:The URL that needs to be handled.
|
||||
|
||||
#### Parameters
|
||||
|
||||
| Name | Description |
|
||||
|
@ -94,8 +90,6 @@ public func signInWithBrowser(
|
|||
|
||||
Start a sign in session with WKWebView. If the function returns with no error threw, it means the user has signed in successfully.
|
||||
|
||||
- Parameters:
|
||||
- redirectUri: One of Redirect URIs of this application.
|
||||
- Throws: An error if the session failed to complete.
|
||||
|
||||
#### Parameters
|
||||
|
@ -120,14 +114,12 @@ Clear all tokens in memory and Keychain. Also try to revoke the Refresh Token fr
|
|||
@MainActor public func getAccessToken(for resource: String?) async throws -> String
|
||||
```
|
||||
|
||||
Get access token for the given resrouce. If resource is `nil`, return the access token for user endpoint.
|
||||
Get an Access Token for the given resource. If resource is `nil`, return the Access Token for user endpoint.
|
||||
|
||||
If the cached access token has expired, this function will try to use `refreshToken` to fetch a new access token from the OIDC provider.
|
||||
If the cached Access Token has expired, this function will try to use `refreshToken` to fetch a new Access Token from the OIDC provider.
|
||||
|
||||
- Parameters:
|
||||
- resource: The resource indicator.
|
||||
- Throws: An error if failed to get a valid access token.
|
||||
- Returns: Access token in string.
|
||||
- Throws: An error if failed to get a valid Access Token.
|
||||
- Returns: Access Token in string.
|
||||
|
||||
#### Parameters
|
||||
|
||||
|
|
|
@ -1,3 +0,0 @@
|
|||
{
|
||||
"position": 4
|
||||
}
|
|
@ -10,6 +10,7 @@
|
|||
- [LogtoClient.NotificationObject](Structs/LogtoClient.NotificationObject.md)
|
||||
- [LogtoConfig](Structs/LogtoConfig.md)
|
||||
- [LogtoError](Structs/LogtoError.md)
|
||||
|
||||
## Enums
|
||||
|
||||
- [LogtoClientErrorTypes](Enums/LogtoClientErrorTypes.md)
|
||||
|
|
|
@ -1,3 +1,3 @@
|
|||
{
|
||||
"position": 5
|
||||
"position": 4
|
||||
}
|
||||
|
|
|
@ -1,10 +1,26 @@
|
|||
{
|
||||
"version.label": {
|
||||
"message": "下一个",
|
||||
"description": "The label for version current"
|
||||
"message": "下一个"
|
||||
},
|
||||
"sidebar.tutorialSidebar.category.Integrate SDK": {
|
||||
"message": "集成 SDK",
|
||||
"description": "The label for category Integrate SDK in sidebar tutorialSidebar"
|
||||
"message": "集成 SDK"
|
||||
},
|
||||
"sidebar.sdkSidebar.category.Classes": {
|
||||
"message": "类(Classes)"
|
||||
},
|
||||
"sidebar.sdkSidebar.category.Enums": {
|
||||
"message": "枚举(Enums)"
|
||||
},
|
||||
"sidebar.sdkSidebar.category.Protocols": {
|
||||
"message": "接口(Protocols)"
|
||||
},
|
||||
"sidebar.sdkSidebar.category.Typealiases": {
|
||||
"message": "类型别名(Typealiases)"
|
||||
},
|
||||
"sidebar.sdkSidebar.category.Extensions": {
|
||||
"message": "扩展(Extensions)"
|
||||
},
|
||||
"sidebar.sdkSidebar.category.Structs": {
|
||||
"message": "结构体(Structs)"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
# SDK 参考概览
|
|
@ -0,0 +1,24 @@
|
|||
---
|
||||
sidebar_position: 1
|
||||
---
|
||||
|
||||
**枚举**
|
||||
|
||||
# `JwtField`
|
||||
|
||||
```swift
|
||||
public enum JwtField
|
||||
```
|
||||
|
||||
## 枚举情况
|
||||
### `audience`
|
||||
|
||||
```swift
|
||||
case audience
|
||||
```
|
||||
|
||||
### `issuer`
|
||||
|
||||
```swift
|
||||
case issuer
|
||||
```
|
|
@ -0,0 +1,135 @@
|
|||
---
|
||||
sidebar_position: 2
|
||||
---
|
||||
|
||||
**枚举**
|
||||
|
||||
# `LogtoCore`
|
||||
|
||||
```swift
|
||||
public enum LogtoCore
|
||||
```
|
||||
|
||||
## 结构体
|
||||
### [CodeTokenResponse](../Structs/LogtoCore.CodeTokenResponse.md)
|
||||
### [OidcConfigResponse](../Structs/LogtoCore.OidcConfigResponse.md)
|
||||
### [RefreshTokenTokenResponse](../Structs/LogtoCore.RefreshTokenTokenResponse.md)
|
||||
### [UserInfoResponse](../Structs/LogtoCore.UserInfoResponse.md)
|
||||
|
||||
## 属性
|
||||
### `postHeaders`
|
||||
|
||||
```swift
|
||||
static let postHeaders: [String: String] = [
|
||||
"Content-Type": "application/x-www-form-urlencoded",
|
||||
]
|
||||
```
|
||||
|
||||
## 方法
|
||||
### `fetchOidcConfig(useSession:uri:)`
|
||||
|
||||
```swift
|
||||
static func fetchOidcConfig(
|
||||
useSession session: NetworkSession = URLSession.shared,
|
||||
uri: URL
|
||||
) async throws -> OidcConfigResponse
|
||||
```
|
||||
|
||||
### `fetchToken(useSession:byAuthorizationCode:codeVerifier:tokenEndpoint:clientId:redirectUri:)`
|
||||
|
||||
```swift
|
||||
static func fetchToken(
|
||||
useSession session: NetworkSession = URLSession.shared,
|
||||
byAuthorizationCode code: String,
|
||||
codeVerifier: String,
|
||||
tokenEndpoint: String,
|
||||
clientId: String,
|
||||
redirectUri: String
|
||||
) async throws -> CodeTokenResponse
|
||||
```
|
||||
|
||||
Fetch token by `authorization_code`.
|
||||
The returned `access_token` is only for [UserInfo Endpoint](https://openid.net/specs/openid-connect-core-1_0.html#UserInfo).
|
||||
Note the function will NOT validate any token in the response.
|
||||
|
||||
### `fetchToken(useSession:byRefreshToken:tokenEndpoint:clientId:resource:scopes:)`
|
||||
|
||||
```swift
|
||||
static func fetchToken(
|
||||
useSession session: NetworkSession = URLSession.shared,
|
||||
byRefreshToken refreshToken: String,
|
||||
tokenEndpoint: String,
|
||||
clientId: String,
|
||||
resource: String?,
|
||||
scopes: [String]
|
||||
) async throws -> RefreshTokenTokenResponse
|
||||
```
|
||||
|
||||
Fetch token by `refresh_token`.
|
||||
Note the function will NOT validate any token in the response.
|
||||
|
||||
### `fetchUserInfo(useSession:userInfoEndpoint:accessToken:)`
|
||||
|
||||
```swift
|
||||
static func fetchUserInfo(
|
||||
useSession session: NetworkSession = URLSession.shared,
|
||||
userInfoEndpoint: String,
|
||||
accessToken: String
|
||||
) async throws -> UserInfoResponse
|
||||
```
|
||||
|
||||
### `fetchJwkSet(useSession:jwksUri:)`
|
||||
|
||||
```swift
|
||||
static func fetchJwkSet(
|
||||
useSession session: NetworkSession = URLSession.shared,
|
||||
jwksUri: String
|
||||
) async throws -> JWKSet
|
||||
```
|
||||
|
||||
### `generateSignInUri(authorizationEndpoint:clientId:redirectUri:codeChallenge:state:scopes:resources:)`
|
||||
|
||||
```swift
|
||||
static func generateSignInUri(
|
||||
authorizationEndpoint: String,
|
||||
clientId: String,
|
||||
redirectUri: URL,
|
||||
codeChallenge: String,
|
||||
state: String,
|
||||
scopes: [String] = [],
|
||||
resources: [String] = []
|
||||
) throws -> URL
|
||||
```
|
||||
|
||||
### `generateSignOutUri(endSessionEndpoint:idToken:postLogoutRedirectUri:)`
|
||||
|
||||
```swift
|
||||
static func generateSignOutUri(
|
||||
endSessionEndpoint: String,
|
||||
idToken: String,
|
||||
postLogoutRedirectUri: String?
|
||||
) throws -> URL
|
||||
```
|
||||
|
||||
### `revoke(useSession:token:revocationEndpoint:clientId:)`
|
||||
|
||||
```swift
|
||||
static func revoke(
|
||||
useSession session: NetworkSession = URLSession.shared,
|
||||
token: String,
|
||||
revocationEndpoint: String,
|
||||
clientId: String
|
||||
) async throws
|
||||
```
|
||||
|
||||
### `verifyAndParseSignInCallbackUri(_:redirectUri:state:)`
|
||||
|
||||
```swift
|
||||
static func verifyAndParseSignInCallbackUri(
|
||||
_ callbackUri: URL,
|
||||
redirectUri: URL,
|
||||
state: String
|
||||
) throws -> String
|
||||
```
|
||||
|
||||
Verify the given `callbackUri` matches the requirements and return `code` parameter if success.
|
|
@ -0,0 +1,24 @@
|
|||
---
|
||||
sidebar_position: 3.1
|
||||
---
|
||||
|
||||
**枚举**
|
||||
|
||||
# `LogtoErrors.Response`
|
||||
|
||||
```swift
|
||||
public enum Response: LocalizedError, Equatable
|
||||
```
|
||||
|
||||
## 枚举情况
|
||||
### `notHttpResponse(response:)`
|
||||
|
||||
```swift
|
||||
case notHttpResponse(response: URLResponse?)
|
||||
```
|
||||
|
||||
### `withCode(code:httpResponse:data:)`
|
||||
|
||||
```swift
|
||||
case withCode(code: Int, httpResponse: HTTPURLResponse, data: Data?)
|
||||
```
|
|
@ -0,0 +1,42 @@
|
|||
---
|
||||
sidebar_position: 3.1
|
||||
---
|
||||
|
||||
**枚举**
|
||||
|
||||
# `LogtoErrors.UriVerification`
|
||||
|
||||
```swift
|
||||
public enum UriVerification: LocalizedError, Equatable
|
||||
```
|
||||
|
||||
## 枚举情况
|
||||
### `redirectUriMismatched`
|
||||
|
||||
```swift
|
||||
case redirectUriMismatched
|
||||
```
|
||||
|
||||
### `decodeComponentsFailed`
|
||||
|
||||
```swift
|
||||
case decodeComponentsFailed
|
||||
```
|
||||
|
||||
### `stateMismatched`
|
||||
|
||||
```swift
|
||||
case stateMismatched
|
||||
```
|
||||
|
||||
### `errorItemFound(items:)`
|
||||
|
||||
```swift
|
||||
case errorItemFound(items: [URLQueryItem])
|
||||
```
|
||||
|
||||
### `missingCode`
|
||||
|
||||
```swift
|
||||
case missingCode
|
||||
```
|
|
@ -0,0 +1,24 @@
|
|||
---
|
||||
sidebar_position: 3.1
|
||||
---
|
||||
|
||||
**枚举**
|
||||
|
||||
# `LogtoErrors.UrlConstruction`
|
||||
|
||||
```swift
|
||||
public enum UrlConstruction: LocalizedError, Equatable
|
||||
```
|
||||
|
||||
## 枚举情况
|
||||
### `invalidEndpoint`
|
||||
|
||||
```swift
|
||||
case invalidEndpoint
|
||||
```
|
||||
|
||||
### `unableToConstructUrl`
|
||||
|
||||
```swift
|
||||
case unableToConstructUrl
|
||||
```
|
|
@ -0,0 +1,16 @@
|
|||
---
|
||||
sidebar_position: 3
|
||||
---
|
||||
**枚举**
|
||||
|
||||
# `LogtoErrors`
|
||||
|
||||
```swift
|
||||
public enum LogtoErrors
|
||||
```
|
||||
|
||||
## 枚举
|
||||
|
||||
### [Response](LogtoErrors.Response.md)
|
||||
### [UriVerification](LogtoErrors.UriVerification.md)
|
||||
### [UrlConstruction](LogtoErrors.UrlConstruction.md)
|
|
@ -0,0 +1,24 @@
|
|||
---
|
||||
sidebar_position: 4.1
|
||||
---
|
||||
|
||||
**枚举**
|
||||
|
||||
# `LogtoRequest.HttpMethod`
|
||||
|
||||
```swift
|
||||
public enum HttpMethod: String
|
||||
```
|
||||
|
||||
## 枚举情况
|
||||
### `get`
|
||||
|
||||
```swift
|
||||
case get = "GET"
|
||||
```
|
||||
|
||||
### `post`
|
||||
|
||||
```swift
|
||||
case post = "POST"
|
||||
```
|
|
@ -0,0 +1,81 @@
|
|||
---
|
||||
sidebar_position: 4
|
||||
---
|
||||
|
||||
**枚举**
|
||||
|
||||
# `LogtoRequest`
|
||||
|
||||
```swift
|
||||
public enum LogtoRequest
|
||||
```
|
||||
|
||||
## 枚举
|
||||
### [LogtoRequest.HttpMethod](LogtoRequest.HttpMethod.md)
|
||||
|
||||
## 方法
|
||||
### `load(useSession:method:url:headers:body:)`
|
||||
|
||||
```swift
|
||||
public static func load(
|
||||
useSession session: NetworkSession,
|
||||
method: HttpMethod,
|
||||
url: URL,
|
||||
headers: [String: String] = [:],
|
||||
body: Data? = nil
|
||||
) async -> (Data?, Error?)
|
||||
```
|
||||
|
||||
### `load(useSession:method:endpoint:headers:body:)`
|
||||
|
||||
```swift
|
||||
public static func load(
|
||||
useSession session: NetworkSession,
|
||||
method: HttpMethod,
|
||||
endpoint: String,
|
||||
headers: [String: String] = [:],
|
||||
body: Data? = nil
|
||||
) async -> (Data?, Error?)
|
||||
```
|
||||
|
||||
### `get(useSession:endpoint:headers:)`
|
||||
|
||||
```swift
|
||||
public static func get<T: Codable>(
|
||||
useSession session: NetworkSession,
|
||||
endpoint: String,
|
||||
headers: [String: String] = [:]
|
||||
) async throws -> T
|
||||
```
|
||||
|
||||
### `get(useSession:url:headers:)`
|
||||
|
||||
```swift
|
||||
public static func get<T: Codable>(
|
||||
useSession session: NetworkSession,
|
||||
url: URL,
|
||||
headers: [String: String] = [:]
|
||||
) async throws -> T
|
||||
```
|
||||
|
||||
### `post(useSession:endpoint:headers:body:)`
|
||||
|
||||
```swift
|
||||
public static func post<T: Codable>(
|
||||
useSession session: NetworkSession,
|
||||
endpoint: String,
|
||||
headers: [String: String] = [:],
|
||||
body: Data? = nil
|
||||
) async throws -> T
|
||||
```
|
||||
|
||||
### `post(useSession:endpoint:headers:body:)`
|
||||
|
||||
```swift
|
||||
public static func post(
|
||||
useSession session: NetworkSession,
|
||||
endpoint: String,
|
||||
headers: [String: String] = [:],
|
||||
body: Data? = nil
|
||||
) async throws
|
||||
```
|
|
@ -0,0 +1,66 @@
|
|||
**枚举**
|
||||
|
||||
# `LogtoUtilities`
|
||||
|
||||
```swift
|
||||
public enum LogtoUtilities
|
||||
```
|
||||
|
||||
## 方法
|
||||
### `withReservedScopes(_:)`
|
||||
|
||||
```swift
|
||||
public static func withReservedScopes(_ scopes: [String]) -> [String]
|
||||
```
|
||||
|
||||
### `generateState()`
|
||||
|
||||
```swift
|
||||
public static func generateState() -> String
|
||||
```
|
||||
|
||||
### `generateCodeVerifier()`
|
||||
|
||||
```swift
|
||||
public static func generateCodeVerifier() -> String
|
||||
```
|
||||
|
||||
### `generateCodeChallenge(codeVerifier:)`
|
||||
|
||||
```swift
|
||||
public static func generateCodeChallenge(codeVerifier: String) -> String
|
||||
```
|
||||
|
||||
### `decodeIdToken(_:)`
|
||||
|
||||
```swift
|
||||
static func decodeIdToken(_ idToken: String) throws -> IdTokenClaims
|
||||
```
|
||||
|
||||
Decode ID Token claims WITHOUT validation.
|
||||
- Returns: A set of ID Token claims.
|
||||
|
||||
#### 参数
|
||||
|
||||
| 名称 | 描述 |
|
||||
| ---- | ----------- |
|
||||
| token | The JWT to decode. |
|
||||
|
||||
### `verifyIdToken(_:issuer:clientId:jwks:forTimeInterval:)`
|
||||
|
||||
```swift
|
||||
static func verifyIdToken(
|
||||
_ idToken: String,
|
||||
issuer: String,
|
||||
clientId: String,
|
||||
jwks: JWKSet,
|
||||
forTimeInterval: TimeInterval = Date().timeIntervalSince1970
|
||||
) throws
|
||||
```
|
||||
|
||||
Verify the give ID Token:
|
||||
* One of the JWKs matches the token.
|
||||
* Issuer matches token payload `iss`.
|
||||
* Client ID matches token payload `aud`.
|
||||
* The token is not expired.
|
||||
* The token is issued in +/- 1min.
|
|
@ -0,0 +1,13 @@
|
|||
**扩展**
|
||||
|
||||
# `URLSession`
|
||||
```swift
|
||||
extension URLSession: NetworkSession
|
||||
```
|
||||
|
||||
## 方法
|
||||
### `loadData(with:)`
|
||||
|
||||
```swift
|
||||
public func loadData(with request: URLRequest) async -> (Data?, Error?)
|
||||
```
|
|
@ -0,0 +1,14 @@
|
|||
**接口**
|
||||
|
||||
# `NetworkSession`
|
||||
|
||||
```swift
|
||||
public protocol NetworkSession
|
||||
```
|
||||
|
||||
## 方法
|
||||
### `loadData(with:)`
|
||||
|
||||
```swift
|
||||
func loadData(with request: URLRequest) async -> (Data?, Error?)
|
||||
```
|
|
@ -0,0 +1,32 @@
|
|||
# Logto 模块
|
||||
|
||||
## 结构体(Structs)
|
||||
|
||||
- [IdTokenClaims](Structs/IdTokenClaims.md)
|
||||
- [JwtHeader](Structs/JwtHeader.md)
|
||||
- [LogtoCore.CodeTokenResponse](Structs/LogtoCore.CodeTokenResponse.md)
|
||||
- [LogtoCore.OidcConfigResponse](Structs/LogtoCore.OidcConfigResponse.md)
|
||||
- [LogtoCore.RefreshTokenTokenResponse](Structs/LogtoCore.RefreshTokenTokenResponse.md)
|
||||
- [LogtoCore.UserInfoResponse](Structs/LogtoCore.UserInfoResponse.md)
|
||||
|
||||
## 枚举(Enums)
|
||||
|
||||
- [JwtField](Enums/JwtField.md)
|
||||
- [LogtoCore](Enums/LogtoCore.md)
|
||||
- [LogtoErrors](Enums/LogtoErrors.md)
|
||||
- [LogtoErrors.Response](Enums/LogtoErrors.Response.md)
|
||||
- [LogtoErrors.UriVerification](Enums/LogtoErrors.UriVerification.md)
|
||||
- [LogtoErrors.UrlConstruction](Enums/LogtoErrors.UrlConstruction.md)
|
||||
- [LogtoRequest](Enums/LogtoRequest.md)
|
||||
- [LogtoRequest.HttpMethod](Enums/LogtoRequest.HttpMethod.md)
|
||||
- [LogtoUtilities](Enums/LogtoUtilities.md)
|
||||
|
||||
## 接口(Protocols)
|
||||
|
||||
- [NetworkSession](Protocols/NetworkSession.md)
|
||||
|
||||
## 扩展(Extensions)
|
||||
|
||||
- [URLSession](Extensions/URLSession.md)
|
||||
|
||||
该文件修改自 [SourceDocs](https://github.com/eneko/SourceDocs) 自动生成的内容
|
|
@ -0,0 +1,44 @@
|
|||
**结构体**
|
||||
|
||||
# `IdTokenClaims`
|
||||
|
||||
```swift
|
||||
public struct IdTokenClaims: Codable, Equatable
|
||||
```
|
||||
|
||||
## 属性
|
||||
### `sub`
|
||||
|
||||
```swift
|
||||
public let sub: String
|
||||
```
|
||||
|
||||
### `atHash`
|
||||
|
||||
```swift
|
||||
public let atHash: String?
|
||||
```
|
||||
|
||||
### `aud`
|
||||
|
||||
```swift
|
||||
public let aud: String
|
||||
```
|
||||
|
||||
### `exp`
|
||||
|
||||
```swift
|
||||
public let exp: Int64
|
||||
```
|
||||
|
||||
### `iat`
|
||||
|
||||
```swift
|
||||
public let iat: Int64
|
||||
```
|
||||
|
||||
### `iss`
|
||||
|
||||
```swift
|
||||
public let iss: String
|
||||
```
|
|
@ -0,0 +1,20 @@
|
|||
**结构体**
|
||||
|
||||
# `JwtHeader`
|
||||
|
||||
```swift
|
||||
public struct JwtHeader: Codable
|
||||
```
|
||||
|
||||
## 属性
|
||||
### `alg`
|
||||
|
||||
```swift
|
||||
public let alg: SignatureAlgorithm
|
||||
```
|
||||
|
||||
### `typ`
|
||||
|
||||
```swift
|
||||
public let typ: TokenType
|
||||
```
|
|
@ -0,0 +1,38 @@
|
|||
**结构体**
|
||||
|
||||
# `LogtoCore.CodeTokenResponse`
|
||||
|
||||
```swift
|
||||
struct CodeTokenResponse: Codable, Equatable
|
||||
```
|
||||
|
||||
## 属性
|
||||
### `accessToken`
|
||||
|
||||
```swift
|
||||
public let accessToken: String
|
||||
```
|
||||
|
||||
### `refreshToken`
|
||||
|
||||
```swift
|
||||
public let refreshToken: String
|
||||
```
|
||||
|
||||
### `idToken`
|
||||
|
||||
```swift
|
||||
public let idToken: String
|
||||
```
|
||||
|
||||
### `scope`
|
||||
|
||||
```swift
|
||||
public let scope: String
|
||||
```
|
||||
|
||||
### `expiresIn`
|
||||
|
||||
```swift
|
||||
public let expiresIn: Int64
|
||||
```
|
|
@ -0,0 +1,50 @@
|
|||
**结构体**
|
||||
|
||||
# `LogtoCore.OidcConfigResponse`
|
||||
|
||||
```swift
|
||||
struct OidcConfigResponse: Codable, Equatable
|
||||
```
|
||||
|
||||
## 属性
|
||||
### `authorizationEndpoint`
|
||||
|
||||
```swift
|
||||
public let authorizationEndpoint: String
|
||||
```
|
||||
|
||||
### `tokenEndpoint`
|
||||
|
||||
```swift
|
||||
public let tokenEndpoint: String
|
||||
```
|
||||
|
||||
### `endSessionEndpoint`
|
||||
|
||||
```swift
|
||||
public let endSessionEndpoint: String
|
||||
```
|
||||
|
||||
### `revocationEndpoint`
|
||||
|
||||
```swift
|
||||
public let revocationEndpoint: String
|
||||
```
|
||||
|
||||
### `userinfoEndpoint`
|
||||
|
||||
```swift
|
||||
public let userinfoEndpoint: String
|
||||
```
|
||||
|
||||
### `jwksUri`
|
||||
|
||||
```swift
|
||||
public let jwksUri: String
|
||||
```
|
||||
|
||||
### `issuer`
|
||||
|
||||
```swift
|
||||
public let issuer: String
|
||||
```
|
|
@ -0,0 +1,38 @@
|
|||
**结构体**
|
||||
|
||||
# `LogtoCore.RefreshTokenTokenResponse`
|
||||
|
||||
```swift
|
||||
struct RefreshTokenTokenResponse: Codable, Equatable
|
||||
```
|
||||
|
||||
## 属性
|
||||
### `accessToken`
|
||||
|
||||
```swift
|
||||
public let accessToken: String
|
||||
```
|
||||
|
||||
### `refreshToken`
|
||||
|
||||
```swift
|
||||
public let refreshToken: String
|
||||
```
|
||||
|
||||
### `idToken`
|
||||
|
||||
```swift
|
||||
public let idToken: String?
|
||||
```
|
||||
|
||||
### `scope`
|
||||
|
||||
```swift
|
||||
public let scope: String
|
||||
```
|
||||
|
||||
### `expiresIn`
|
||||
|
||||
```swift
|
||||
public let expiresIn: Int64
|
||||
```
|
|
@ -0,0 +1,14 @@
|
|||
**结构体**
|
||||
|
||||
# `LogtoCore.UserInfoResponse`
|
||||
|
||||
```swift
|
||||
struct UserInfoResponse: Codable, Equatable
|
||||
```
|
||||
|
||||
## 属性
|
||||
### `sub`
|
||||
|
||||
```swift
|
||||
public let sub: String
|
||||
```
|
|
@ -0,0 +1,154 @@
|
|||
**类**
|
||||
|
||||
# `LogtoClient`
|
||||
|
||||
```swift
|
||||
public class LogtoClient
|
||||
```
|
||||
|
||||
## 结构体
|
||||
|
||||
### [NotificationObject](../Structs/LogtoClient.NotificationObject.md)
|
||||
|
||||
## 属性
|
||||
### `HandleNotification`
|
||||
|
||||
```swift
|
||||
public static let HandleNotification = Notification.Name("Logto Handle")
|
||||
```
|
||||
|
||||
供 LogtoClient 处理的通知名称。
|
||||
|
||||
### `idToken`
|
||||
|
||||
```swift
|
||||
public internal(set) var idToken: String?
|
||||
```
|
||||
|
||||
经过缓存的原始 ID Token 字符串。使用 `.getIdTokenClaims()` 以获得结构化数据。
|
||||
|
||||
### `refreshToken`
|
||||
|
||||
```swift
|
||||
public internal(set) var refreshToken: String?
|
||||
```
|
||||
|
||||
经过缓存的 Refresh Token。
|
||||
|
||||
### `oidcConfig`
|
||||
|
||||
```swift
|
||||
public internal(set) var oidcConfig: LogtoCore.OidcConfigResponse?
|
||||
```
|
||||
|
||||
通过 [OIDC Discovery](https://openid.net/specs/openid-connect-discovery-1_0.html) 接口获得的配置。
|
||||
|
||||
### `isAuthenticated`
|
||||
|
||||
```swift
|
||||
public var isAuthenticated: Bool
|
||||
```
|
||||
|
||||
用户是否已经登录。
|
||||
|
||||
## 方法
|
||||
### `handle(forClientId:url:)`
|
||||
|
||||
```swift
|
||||
public static func handle(forClientId clientId: String? = nil, url: URL)
|
||||
```
|
||||
|
||||
发送一个通知让 Logto 客户端处理该 URL。通常该函数需要在 `onOpenURL(perform:)` (SwiftUI) 或者 `application(_:open:options:)` (AppDelegate) 被调用。详情见集成指南。
|
||||
|
||||
#### 参数
|
||||
|
||||
| 名称 | 描述 |
|
||||
| ---- | ----------- |
|
||||
| forClientId | 该通知是否仅供特定的客户端 ID。当值为 `nil` 时,所有的 Logto 客户端会尝试处理该通知。 |
|
||||
| url | 需要被处理的 URL。 |
|
||||
|
||||
### `init(useConfig:socialPlugins:session:)`
|
||||
|
||||
```swift
|
||||
public init(
|
||||
useConfig config: LogtoConfig,
|
||||
socialPlugins: [LogtoSocialPlugin] = [],
|
||||
session: NetworkSession = URLSession.shared
|
||||
)
|
||||
```
|
||||
|
||||
### `signInWithBrowser(redirectUri:)`
|
||||
|
||||
```swift
|
||||
public func signInWithBrowser(
|
||||
redirectUri: String
|
||||
) async throws
|
||||
```
|
||||
|
||||
启动一个基于 WKWebView 的登录会话。如果该函数在没有抛出错误的情况下返回,说明用户已经成功登录。
|
||||
|
||||
- 抛出:一个错误如果会话无法成功完成。
|
||||
|
||||
#### 参数
|
||||
|
||||
| 名称 | 描述 |
|
||||
| ---- | ----------- |
|
||||
| redirectUri | 该应用的 Redirect URI 列表中的一项。 |
|
||||
|
||||
### `signOut()`
|
||||
|
||||
```swift
|
||||
func signOut() async -> Errors.SignOut?
|
||||
```
|
||||
|
||||
清理所有在内存与 Keychain 中的 token。同时尝试吊销在 OIDC provider 中的 Refresh Token。
|
||||
|
||||
- 返回:一个错误如果吊销 token 失败。通常该错误可以被安全地忽略。
|
||||
|
||||
### `getAccessToken(for:)`
|
||||
|
||||
```swift
|
||||
@MainActor public func getAccessToken(for resource: String?) async throws -> String
|
||||
```
|
||||
|
||||
对于提供的 resource 获取一个 Access Token。如果 resource 为 `nil`,则返回用于用户信息接口的 Access Token。
|
||||
|
||||
如果缓存的 Access Token 已过期,该函数会尝试使用 Refresh Token 去 OIDC provider 获得一个新的 Access Token。
|
||||
|
||||
- 抛出:一个错误如果无法获取到一个有效的 Access Token。
|
||||
- 返回:Access Token 字符串。
|
||||
|
||||
#### 参数
|
||||
|
||||
| 名称 | 描述 |
|
||||
| ---- | ----------- |
|
||||
| resource | 资源指示器(Resource indicator)。 |
|
||||
|
||||
### `fetchUserInfo()`
|
||||
|
||||
```swift
|
||||
public func fetchUserInfo() async throws -> LogtoCore.UserInfoResponse
|
||||
```
|
||||
|
||||
### `getIdTokenClaims()`
|
||||
|
||||
```swift
|
||||
public func getIdTokenClaims() throws -> IdTokenClaims
|
||||
```
|
||||
|
||||
获取结构化的 [ID Token 声明](https://openid.net/specs/openid-connect-core-1_0.html#IDToken)。
|
||||
|
||||
- 抛出:一个错误如果没有 ID Token 或者解码失败。
|
||||
|
||||
### `handle(url:)`
|
||||
|
||||
```swift
|
||||
public func handle(url: URL) -> Bool
|
||||
```
|
||||
|
||||
尝试通过遍历所有的社会化登录插件以处理给定的 URL。
|
||||
|
||||
如果有一个社会化登录插件处理了该 URL,则遍历会立即停止。
|
||||
|
||||
- 返回:`true` 如果有一个社会化登录插件处理了该 URL。
|
||||
|
|
@ -0,0 +1,28 @@
|
|||
---
|
||||
sidebar_position: 1.1
|
||||
---
|
||||
|
||||
**枚举**
|
||||
|
||||
# `LogtoClientErrorTypes.AccessToken`
|
||||
|
||||
```swift
|
||||
public enum AccessToken
|
||||
```
|
||||
|
||||
## 枚举情况
|
||||
### `noRefreshTokenFound`
|
||||
|
||||
```swift
|
||||
case noRefreshTokenFound
|
||||
```
|
||||
|
||||
Keychain 中没有 Refresh Token。
|
||||
|
||||
### `unableToFetchTokenByRefreshToken`
|
||||
|
||||
```swift
|
||||
case unableToFetchTokenByRefreshToken
|
||||
```
|
||||
|
||||
无法通过 Refresh Token 获取一个新的 Access Token。该 Refresh Token 可能已经过期或者被吊销。
|
|
@ -0,0 +1,20 @@
|
|||
---
|
||||
sidebar_position: 1.1
|
||||
---
|
||||
|
||||
**枚举**
|
||||
|
||||
# `LogtoClientErrorTypes.JwkSet`
|
||||
|
||||
```swift
|
||||
public enum JwkSet
|
||||
```
|
||||
|
||||
## 枚举情况
|
||||
### `unableToFetchJwkSet`
|
||||
|
||||
```swift
|
||||
case unableToFetchJwkSet
|
||||
```
|
||||
|
||||
无法通过给定的 URI 获取 JWK 集。
|
|
@ -0,0 +1,20 @@
|
|||
---
|
||||
sidebar_position: 1.1
|
||||
---
|
||||
|
||||
**枚举**
|
||||
|
||||
# `LogtoClientErrorTypes.OidcConfig`
|
||||
|
||||
```swift
|
||||
public enum OidcConfig
|
||||
```
|
||||
|
||||
## 枚举情况
|
||||
### `unableToFetchOidcConfig`
|
||||
|
||||
```swift
|
||||
case unableToFetchOidcConfig
|
||||
```
|
||||
|
||||
无法从 OIDC provider 获取 OIDC 配置。
|
|
@ -0,0 +1,58 @@
|
|||
---
|
||||
sidebar_position: 1.1
|
||||
---
|
||||
|
||||
**枚举**
|
||||
|
||||
# `LogtoClientErrorTypes.SignIn`
|
||||
|
||||
```swift
|
||||
public enum SignIn: String
|
||||
```
|
||||
|
||||
## 枚举情况
|
||||
### `unknownError`
|
||||
|
||||
```swift
|
||||
case unknownError
|
||||
```
|
||||
|
||||
### `authFailed`
|
||||
|
||||
```swift
|
||||
case authFailed
|
||||
```
|
||||
|
||||
无法完成验证(登录)。可能是一个内部错误或者用户取消了验证。
|
||||
|
||||
### `unableToConstructRedirectUri`
|
||||
|
||||
```swift
|
||||
case unableToConstructRedirectUri
|
||||
```
|
||||
|
||||
无法通过给定的字符串构建 Redirect URI。
|
||||
|
||||
### `unableToConstructAuthUri`
|
||||
|
||||
```swift
|
||||
case unableToConstructAuthUri
|
||||
```
|
||||
|
||||
无法通过配置构建 Redirect URI。请检查 OIDC 和 Logto 配置。
|
||||
|
||||
### `unableToFetchToken`
|
||||
|
||||
```swift
|
||||
case unableToFetchToken
|
||||
```
|
||||
|
||||
在验证结束后无法完成首次 token 请求。
|
||||
|
||||
### `unexpectedSignInCallback`
|
||||
|
||||
```swift
|
||||
case unexpectedSignInCallback
|
||||
```
|
||||
|
||||
登录回调 URI 无效。
|
|
@ -0,0 +1,20 @@
|
|||
---
|
||||
sidebar_position: 1.1
|
||||
---
|
||||
|
||||
**枚举**
|
||||
|
||||
# `LogtoClientErrorTypes.SignOut`
|
||||
|
||||
```swift
|
||||
public enum SignOut: String
|
||||
```
|
||||
|
||||
## 枚举情况
|
||||
### `unableToRevokeToken`
|
||||
|
||||
```swift
|
||||
case unableToRevokeToken
|
||||
```
|
||||
|
||||
无法吊销 OIDC provider 中的 token。通常该错误可以被安全地忽略。
|
|
@ -0,0 +1,20 @@
|
|||
---
|
||||
sidebar_position: 1.1
|
||||
---
|
||||
|
||||
**枚举**
|
||||
|
||||
# `LogtoClientErrorTypes.UserInfo`
|
||||
|
||||
```swift
|
||||
public enum UserInfo
|
||||
```
|
||||
|
||||
## 枚举情况
|
||||
### `unableToFetchUserInfo`
|
||||
|
||||
```swift
|
||||
case unableToFetchUserInfo
|
||||
```
|
||||
|
||||
无法通过 OIDC provider 获取用户信息。
|
|
@ -0,0 +1,20 @@
|
|||
---
|
||||
sidebar_position: 1
|
||||
---
|
||||
|
||||
**枚举**
|
||||
|
||||
# `LogtoClientErrorTypes`
|
||||
|
||||
```swift
|
||||
public enum LogtoClientErrorTypes
|
||||
```
|
||||
|
||||
## 枚举
|
||||
|
||||
### [AccessToken](LogtoClientErrorTypes.AccessToken.md)
|
||||
### [JwkSet](LogtoClientErrorTypes.JwkSet.md)
|
||||
### [OidcConfig](LogtoClientErrorTypes.OidcConfig.md)
|
||||
### [SignIn](LogtoClientErrorTypes.SignIn.md)
|
||||
### [SignOut](LogtoClientErrorTypes.SignOut.md)
|
||||
### [UserInfo](LogtoClientErrorTypes.UserInfo.md)
|
|
@ -0,0 +1,20 @@
|
|||
---
|
||||
sidebar_position: 2.1
|
||||
---
|
||||
|
||||
**枚举**
|
||||
|
||||
# `LogtoClientErrors.IdToken`
|
||||
|
||||
```swift
|
||||
public enum IdToken: String, LocalizedError
|
||||
```
|
||||
|
||||
## 枚举情况
|
||||
### `notAuthenticated`
|
||||
|
||||
```swift
|
||||
case notAuthenticated
|
||||
```
|
||||
|
||||
Keychain 中没有 ID Token。
|
|
@ -0,0 +1,24 @@
|
|||
---
|
||||
sidebar_position: 2
|
||||
---
|
||||
|
||||
**枚举**
|
||||
|
||||
# `LogtoClientErrors`
|
||||
|
||||
```swift
|
||||
public enum LogtoClientErrors
|
||||
```
|
||||
|
||||
## 枚举
|
||||
|
||||
### [IdToken](LogtoClientErrors.IdToken.md)
|
||||
|
||||
## 类型别名
|
||||
|
||||
### [AccessToken](../Typealiases/LogtoClientErrors.AccessToken.md)
|
||||
### [JwkSet](../Typealiases/LogtoClientErrors.JwkSet.md)
|
||||
### [OidcConfig](../Typealiases/LogtoClientErrors.OidcConfig.md)
|
||||
### [SignIn](../Typealiases/LogtoClientErrors.SignIn.md)
|
||||
### [SignOut](../Typealiases/LogtoClientErrors.SignOut.md)
|
||||
### [UserInfo](../Typealiases/LogtoClientErrors.UserInfo.md)
|
|
@ -0,0 +1,36 @@
|
|||
# LogtoClient 模块
|
||||
|
||||
## 类(Classes)
|
||||
|
||||
- [LogtoClient](Classes/LogtoClient.md)
|
||||
|
||||
## 结构体(Structs)
|
||||
|
||||
- [AccessToken](Structs/AccessToken.md)
|
||||
- [LogtoClient.NotificationObject](Structs/LogtoClient.NotificationObject.md)
|
||||
- [LogtoConfig](Structs/LogtoConfig.md)
|
||||
- [LogtoError](Structs/LogtoError.md)
|
||||
|
||||
## 枚举(Enums)
|
||||
|
||||
- [LogtoClientErrorTypes](Enums/LogtoClientErrorTypes.md)
|
||||
- [LogtoClientErrorTypes.AccessToken](Enums/LogtoClientErrorTypes.AccessToken.md)
|
||||
- [LogtoClientErrorTypes.JwkSet](Enums/LogtoClientErrorTypes.JwkSet.md)
|
||||
- [LogtoClientErrorTypes.OidcConfig](Enums/LogtoClientErrorTypes.OidcConfig.md)
|
||||
- [LogtoClientErrorTypes.SignIn](Enums/LogtoClientErrorTypes.SignIn.md)
|
||||
- [LogtoClientErrorTypes.SignOut](Enums/LogtoClientErrorTypes.SignOut.md)
|
||||
- [LogtoClientErrorTypes.UserInfo](Enums/LogtoClientErrorTypes.UserInfo.md)
|
||||
- [LogtoClientErrors](Enums/LogtoClientErrors.md)
|
||||
- [LogtoClientErrors.IdToken](Enums/LogtoClientErrors.IdToken.md)
|
||||
|
||||
## 类型别名(Typealiases)
|
||||
|
||||
- [LogtoClientErrors.AccessToken](Typealiases/LogtoClientErrors.AccessToken.md)
|
||||
- [LogtoClientErrors.JwkSet](Typealiases/LogtoClientErrors.JwkSet.md)
|
||||
- [LogtoClientErrors.OidcConfig](Typealiases/LogtoClientErrors.OidcConfig.md)
|
||||
- [LogtoClientErrors.SignIn](Typealiases/LogtoClientErrors.SignIn.md)
|
||||
- [LogtoClientErrors.SignOut](Typealiases/LogtoClientErrors.SignOut.md)
|
||||
- [LogtoClientErrors.UserInfo](Typealiases/LogtoClientErrors.UserInfo.md)
|
||||
- [UnifiedViewController](Typealiases/UnifiedViewController.md)
|
||||
|
||||
该文件修改自 [SourceDocs](https://github.com/eneko/SourceDocs) 自动生成的内容
|
|
@ -0,0 +1,26 @@
|
|||
**结构体**
|
||||
|
||||
# `AccessToken`
|
||||
|
||||
```swift
|
||||
public struct AccessToken: Codable
|
||||
```
|
||||
|
||||
## 属性
|
||||
### `token`
|
||||
|
||||
```swift
|
||||
public let token: String
|
||||
```
|
||||
|
||||
### `scope`
|
||||
|
||||
```swift
|
||||
public let scope: String
|
||||
```
|
||||
|
||||
### `expiresAt`
|
||||
|
||||
```swift
|
||||
public let expiresAt: TimeInterval
|
||||
```
|
|
@ -0,0 +1,20 @@
|
|||
**结构体**
|
||||
|
||||
# `LogtoClient.NotificationObject`
|
||||
|
||||
```swift
|
||||
public struct NotificationObject
|
||||
```
|
||||
|
||||
## 属性
|
||||
### `clientId`
|
||||
|
||||
```swift
|
||||
public let clientId: String?
|
||||
```
|
||||
|
||||
### `url`
|
||||
|
||||
```swift
|
||||
public let url: URL
|
||||
```
|
|
@ -0,0 +1,51 @@
|
|||
**结构体**
|
||||
|
||||
# `LogtoConfig`
|
||||
|
||||
```swift
|
||||
public struct LogtoConfig
|
||||
```
|
||||
|
||||
## 属性
|
||||
### `endpoint`
|
||||
|
||||
```swift
|
||||
public let endpoint: URL
|
||||
```
|
||||
|
||||
### `clientId`
|
||||
|
||||
```swift
|
||||
public let clientId: String
|
||||
```
|
||||
|
||||
### `resources`
|
||||
|
||||
```swift
|
||||
public let resources: [String]
|
||||
```
|
||||
|
||||
### `usingPersistStorage`
|
||||
|
||||
```swift
|
||||
public let usingPersistStorage: Bool
|
||||
```
|
||||
|
||||
### `scopes`
|
||||
|
||||
```swift
|
||||
public var scopes: [String]
|
||||
```
|
||||
|
||||
## 方法
|
||||
### `init(endpoint:clientId:scopes:resources:usingPersistStorage:)`
|
||||
|
||||
```swift
|
||||
public init(
|
||||
endpoint: String,
|
||||
clientId: String,
|
||||
scopes: [String] = [],
|
||||
resources: [String] = [],
|
||||
usingPersistStorage: Bool = true
|
||||
) throws
|
||||
```
|
|
@ -0,0 +1,20 @@
|
|||
**结构体**
|
||||
|
||||
# `LogtoError`
|
||||
|
||||
```swift
|
||||
public struct LogtoError<T>: LocalizedError
|
||||
```
|
||||
|
||||
## 属性
|
||||
### `type`
|
||||
|
||||
```swift
|
||||
public let type: T
|
||||
```
|
||||
|
||||
### `innerError`
|
||||
|
||||
```swift
|
||||
public let innerError: Error?
|
||||
```
|
|
@ -0,0 +1,7 @@
|
|||
**类型别名**
|
||||
|
||||
# `LogtoClientErrors.AccessToken`
|
||||
|
||||
```swift
|
||||
public typealias AccessToken = LogtoError<LogtoClientErrorTypes.AccessToken>
|
||||
```
|
|
@ -0,0 +1,7 @@
|
|||
**类型别名**
|
||||
|
||||
# `LogtoClientErrors.JwkSet`
|
||||
|
||||
```swift
|
||||
public typealias JwkSet = LogtoError<LogtoClientErrorTypes.JwkSet>
|
||||
```
|
|
@ -0,0 +1,7 @@
|
|||
**类型别名**
|
||||
|
||||
# `LogtoClientErrors.OidcConfig`
|
||||
|
||||
```swift
|
||||
public typealias OidcConfig = LogtoError<LogtoClientErrorTypes.OidcConfig>
|
||||
```
|
|
@ -0,0 +1,7 @@
|
|||
**类型别名**
|
||||
|
||||
# `LogtoClientErrors.SignIn`
|
||||
|
||||
```swift
|
||||
public typealias SignIn = LogtoError<LogtoClientErrorTypes.SignIn>
|
||||
```
|
|
@ -0,0 +1,7 @@
|
|||
**类型别名**
|
||||
|
||||
# `LogtoClientErrors.SignOut`
|
||||
|
||||
```swift
|
||||
public typealias SignOut = LogtoError<LogtoClientErrorTypes.SignOut>
|
||||
```
|
|
@ -0,0 +1,7 @@
|
|||
**类型别名**
|
||||
|
||||
# `LogtoClientErrors.UserInfo`
|
||||
|
||||
```swift
|
||||
public typealias UserInfo = LogtoError<LogtoClientErrorTypes.UserInfo>
|
||||
```
|
|
@ -0,0 +1,7 @@
|
|||
**类型别名**
|
||||
|
||||
# `UnifiedViewController`
|
||||
|
||||
```swift
|
||||
public typealias UnifiedViewController = NSViewController | UIViewController
|
||||
```
|
|
@ -0,0 +1 @@
|
|||
# @logto-io/swift
|
Loading…
Add table
Reference in a new issue