如何使用 VideoSubscriberAccount 框架通过 Apple SSO(电视提供商)进行身份验证
How to authenticate with Apple SSO (TV Provider) using VideoSubscriberAccount framework
我需要使用 Apple SSO 为我的应用程序实施身份验证方案:
- 在“设置电视提供商”中检查已注册用户
- 如果没有注册用户,请从我的应用程序中登录 TV Provider
- 使用令牌、uuid 等从我的提供商后端获取已签名用户的身份验证负载
使用 VideoSubscriberAccount
框架配置和实施 Apple SSO 身份验证的主要步骤是什么,因为遗憾的是没有太多信息和示例?
使用 Apple SSO 实施身份验证方案有几个常见步骤:
1.配置您的临时配置文件、.entitlements 和 Info.plist 文件
YourApp.entitlements 文件必须具有为您的应用启用 SSO 的特殊密钥:
com.apple.developer.video-subscriber-single-sign-on Boolean YES
此权利也应出现在您的临时个人资料中,例如:
Info.plist 必须有下一个密钥,其中包含将在用户首次访问视频订阅时显示给用户的消息:
NSVideoSubscriberAccountUsageDescription String "This app needs access to your TV Provider."
2。创建帐户管理器实例并实施委托方法以协调对订阅者帐户的访问。
import VideoSubscriberAccount
...
let accountManager = VSAccountManager()
accountManager.delegate = self
...
extension YourController : VSAccountManagerDelegate {
func accountManager(_ accountManager: VSAccountManager, present viewController: UIViewController) {
window?.rootViewController?.present(viewController, animated: true, completion: nil)
}
func accountManager(_ accountManager: VSAccountManager, dismiss viewController: UIViewController) {
viewController.dismiss(animated: true, completion: nil)
}
func accountManager(_ accountManager: VSAccountManager, shouldAuthenticateAccountProviderWithIdentifier accountProviderIdentifier: String) -> Bool {
return true
}
}
3。判断应用访问用户订阅信息的状态。
accountManager.checkAccessStatus(options: [VSCheckAccessOption.prompt : true]) { status, error in
...
}
如果应用第一次尝试访问订阅信息,将显示下一个提示:
4。请求有关订阅者帐户的信息。
如果获得访问权限,您可以发出元数据请求以检查是否有签名用户:
if case .granted = status {
let request = VSAccountMetadataRequest()
request.includeAccountProviderIdentifier = true
request.isInterruptionAllowed = true
accountManager.enqueue(request) { metadata, error in
...
}
}
如果没有已签名的帐户,将显示供应商选择列表和 sign-in 表格:
要跳过提供商列表视图,您可以为请求设置支持的提供商标识符,例如:
request.supportedAccountProviderIdentifiers = ["Hulu"]
5.具有来自身份提供者的信息端点的必需属性的第二个元数据请求
如果没有错误并且存在签名帐户,您应该调用身份提供者的信息端点以获取第二次元数据调用所需的属性,例如:
attributeNames
: 需要的 SAML 属性列表
verificationToken
: 从服务提供商到身份提供商的 Base64 编码签名身份验证请求
channelIdentifier
: 服务提供商实体id
并使用这些参数发出第二个请求:
request.attributeNames = attributeNames
request.verificationToken = verificationToken
request.channelIdentifier = channelIdentifier
accountManager.enqueue(request) { metadata, error in
...
}
6.请求翻译 SAML 身份验证响应
秒元数据请求以 Apple 的 SAML 负载响应,该负载应发送到您的身份提供商的翻译端点,然后端点解析该元素和 returns 类似于身份验证负载的响应,例如:
if let samlPayload = metadata?.samlAttributeQueryResponse {
let body = [
...
"saml" : samlPayload
]
fetch("https://your.identity.provider/saml/translate", httpBody: body)
}
端点应以 JSON 响应,其中包含您的所有身份验证数据:令牌、uuid 等。
我需要使用 Apple SSO 为我的应用程序实施身份验证方案:
- 在“设置电视提供商”中检查已注册用户
- 如果没有注册用户,请从我的应用程序中登录 TV Provider
- 使用令牌、uuid 等从我的提供商后端获取已签名用户的身份验证负载
使用 VideoSubscriberAccount
框架配置和实施 Apple SSO 身份验证的主要步骤是什么,因为遗憾的是没有太多信息和示例?
使用 Apple SSO 实施身份验证方案有几个常见步骤:
1.配置您的临时配置文件、.entitlements 和 Info.plist 文件
YourApp.entitlements 文件必须具有为您的应用启用 SSO 的特殊密钥:
com.apple.developer.video-subscriber-single-sign-on Boolean YES
此权利也应出现在您的临时个人资料中,例如:
Info.plist 必须有下一个密钥,其中包含将在用户首次访问视频订阅时显示给用户的消息:
NSVideoSubscriberAccountUsageDescription String "This app needs access to your TV Provider."
2。创建帐户管理器实例并实施委托方法以协调对订阅者帐户的访问。
import VideoSubscriberAccount
...
let accountManager = VSAccountManager()
accountManager.delegate = self
...
extension YourController : VSAccountManagerDelegate {
func accountManager(_ accountManager: VSAccountManager, present viewController: UIViewController) {
window?.rootViewController?.present(viewController, animated: true, completion: nil)
}
func accountManager(_ accountManager: VSAccountManager, dismiss viewController: UIViewController) {
viewController.dismiss(animated: true, completion: nil)
}
func accountManager(_ accountManager: VSAccountManager, shouldAuthenticateAccountProviderWithIdentifier accountProviderIdentifier: String) -> Bool {
return true
}
}
3。判断应用访问用户订阅信息的状态。
accountManager.checkAccessStatus(options: [VSCheckAccessOption.prompt : true]) { status, error in
...
}
如果应用第一次尝试访问订阅信息,将显示下一个提示:
4。请求有关订阅者帐户的信息。
如果获得访问权限,您可以发出元数据请求以检查是否有签名用户:
if case .granted = status {
let request = VSAccountMetadataRequest()
request.includeAccountProviderIdentifier = true
request.isInterruptionAllowed = true
accountManager.enqueue(request) { metadata, error in
...
}
}
如果没有已签名的帐户,将显示供应商选择列表和 sign-in 表格:
要跳过提供商列表视图,您可以为请求设置支持的提供商标识符,例如:
request.supportedAccountProviderIdentifiers = ["Hulu"]
5.具有来自身份提供者的信息端点的必需属性的第二个元数据请求
如果没有错误并且存在签名帐户,您应该调用身份提供者的信息端点以获取第二次元数据调用所需的属性,例如:
attributeNames
: 需要的 SAML 属性列表verificationToken
: 从服务提供商到身份提供商的 Base64 编码签名身份验证请求channelIdentifier
: 服务提供商实体id
并使用这些参数发出第二个请求:
request.attributeNames = attributeNames
request.verificationToken = verificationToken
request.channelIdentifier = channelIdentifier
accountManager.enqueue(request) { metadata, error in
...
}
6.请求翻译 SAML 身份验证响应
秒元数据请求以 Apple 的 SAML 负载响应,该负载应发送到您的身份提供商的翻译端点,然后端点解析该元素和 returns 类似于身份验证负载的响应,例如:
if let samlPayload = metadata?.samlAttributeQueryResponse {
let body = [
...
"saml" : samlPayload
]
fetch("https://your.identity.provider/saml/translate", httpBody: body)
}
端点应以 JSON 响应,其中包含您的所有身份验证数据:令牌、uuid 等。