适用于:
外部租户(了解详细信息)
本教程演示注册 iOS/macOS 应用后如何使用本机身份验证自动登录用户。
在本教程中,你将:
- 注册后登录。
- 处理错误。
先决条件
- 如果你在使用 iOS,请按照在示例 iOS (Swift) 移动应用中使用原生身份验证登录用户的步骤进行操作。 如果使用 macOS,请按照 使用本机身份验证在示例 macOS(Swift)应用中登录用户中的步骤进行操作。 这些文章介绍如何运行使用租户设置配置的示例应用。
- 教程:使用本机身份验证在 iOS/macOS 应用中添加注册。 无论你是使用电子邮件和密码进行注册,还是通过电子邮件发送一次性密码注册,本教程中的步骤都应该有效。
注册后登录
Sign in after sign up 是登录用户流的增强功能,该功能可在成功注册后自动登录。 SDK 让开发人员能够在注册后将用户登录,而无需提供用户名,或者通过一次性密码验证电子邮件地址。
若要在成功注册后将用户登录,请从 signIn(delegate) 中返回的新状态 SignInAfterSignUpState 中使用 onSignUpCompleted(newState) 方法:
extension ViewController: SignUpVerifyCodeDelegate {
func onSignUpVerifyCodeError(error: MSAL.VerifyCodeError, newState: MSAL.SignUpCodeRequiredState?) {
resultTextView.text = "Error verifying code: \(error.errorDescription ?? "no description")"
}
func onSignUpCompleted(newState: SignInAfterSignUpState) {
resultTextView.text = "Signed up successfully!"
let parameters = MSALNativeAuthSignInAfterSignUpParameters()
newState.signIn(parameters: parameters, delegate: self)
}
}
signIn(parameters:delegate) 接受 MSALNativeAuthSignInAfterSignUpParameters 实例和委托参数,我们必须在 SignInAfterSignUpDelegate 协议中实现所需的方法。
在最常见的场景中,我们收到对 onSignInCompleted(result) 的调用,它指示用户已登录。 结果可用于检索 access token。
extension ViewController: SignInAfterSignUpDelegate {
func onSignInAfterSignUpError(error: SignInAfterSignUpError) {
resultTextView.text = "Error signing in after sign up"
}
func onSignInCompleted(result: MSAL.MSALNativeAuthUserAccountResult) {
// User successfully signed in
let parameters = MSALNativeAuthGetAccessTokenParameters()
result.getAccessToken(parameters: parameters, delegate: self)
}
}
getAccessToken(parameters:delegate) 接受 MSALNativeAuthGetAccessTokenParameters 实例和委托参数,我们必须在 CredentialsDelegate 协议中实现所需的方法。
在最常见的场景中,我们收到对 onAccessTokenRetrieveCompleted(result) 的调用,它指示用户已获取 access token。
extension ViewController: CredentialsDelegate {
func onAccessTokenRetrieveError(error: MSAL.RetrieveAccessTokenError) {
resultTextView.text = "Error retrieving access token"
}
func onAccessTokenRetrieveCompleted(result: MSALNativeAuthTokenResult) {
resultTextView.text = "Signed in. Access Token: \(result.accessToken)"
}
}
配置自定义声明提供程序
如果要将来自外部系统的声明添加到颁发给应用的令牌中,请使用 自定义声明提供程序。 自定义声明提供程序由自定义身份验证扩展组成,它会调用外部 REST API 来从外部系统提取声明。
按照 配置自定义声明提供程序 中的步骤将外部系统中的声明添加到安全令牌中。