0

再会,

在我的适配器中,我配置securityCheckDefinition如下:

<securityCheckDefinition name="UserAuthentication" class="com.mobile.authentication.UserAuthentication">
        <property name="maxAttempts" defaultValue="3" description="How many attempts are allowed"/>
    </securityCheckDefinition>

在我的 mfp 控制台应用程序中,在 Security 选项卡下,我配置了一个范围调用push.mobileclient

在此处输入图像描述

在我的前端代码中,我调用 mfp 登录方法如下,以使用 mfp“验证”我的客户端:

WLAuthorizationManager.login('UserAuthentication', authObj)

我看到我的 .handleSuccess() 被触发,这意味着“身份验证”部分是成功的。(如果我错了,请纠正我。)

在 .handleSuccess() 之后,我调用 mfp gainAccessToken() 方法来检查我的客户端是否已经通过 mfp 成功“认证”,代码如下:

WLAuthorizationManager.obtainAccessToken('push.mobileclient').then(
            function (accessToken) {
                WL.Logger.debug("obtainAccessToken onSuccess");
                console.log("obtainAccessToken onSuccess");
                console.log(accessToken)
            },
            function (response) {
                WL.Logger.debug("obtainAccessToken onFailure: " + JSON.stringify(response));
                console.log("obtainAccessToken onFailure: " + JSON.stringify(response));
        });

答案是肯定的,我得到了“obtainAccessToken onSuccess”。

我的问题是我打电话WLAuthorizationManager.login('UserAuthentication', authObj)给mfp“注册/验证”,但是当我想检查它是否成功时,我正在使用WLAuthorizationManager.obtainAccessToken('push.mobileclient'),1是UserAuthentication,另一个1是push.mobileclient,2个不同的东西,怎么WLAuthorizationManager.obtainAccessToken('push.mobileclient')知道我的客户已经“注册/认证”成功了吗?

4

1 回答 1

2

触发时,WLAuthorizationManager.login(SecurityCheckName, authObj)您正在使用 MobileFirst Server 对用户进行身份验证。您正在创建一个AuthenticatedUser对象并设置一个 AuthenticationContext。此过程创建保留在服务器中的身份验证状态并将响应发送到客户端。在客户端,响应进入handleSuccess()ChallengeHandler 类中的方法,这样就完成了身份验证流程。

稍后,当您调用时,WLAuthorizationManager.obtainAccessToken(scopename)您将请求 MobileFirst 授权服务器为 scope 颁发 OAuth 令牌<scopename>。在你的情况下,"push.mobileclient".

如果在 MobileFirst 管理控制台中定义了范围,但未映射到安全检查(UserAuthentication在您的情况下),MobileFirst Server 会为范围发出 OAuth 令牌<scopeName>

MobileFirst 服务器如何知道客户端已注册或已通过身份验证?

MobileFirst 服务器保留客户端的注册和认证状态。即使没有登录自定义安全检查,MobileFirst 服务器也会应用默认的安全级别并维护身份验证状态。当客户端登录到自定义安全检查时,MobileFirst 服务器会使用此信息更新身份验证状态。这样,身份验证状态将与所有信息一起保持,直到它过期或客户端注销。

但是,在 MobileFirst 控制台中,如果范围被映射到安全检查(例如 UserAuthentication),那么首先 MobileFirst 服务器会检查您是否已经登录到 UserAuthentication(您首先登录)并且身份验证上下文仍然有效(未过期)。如果是这样,MobileFirst Server 将继续使用 发出 OAuth 令牌<scopeName>。如果不是,MobileFirst Server 首先要求您进行身份验证。这个挑战将到达handleChallenge()您的 ChallengeHandler 类的方法。一旦质询-响应成功完成并进入流程handleSuccess(),MobileFirst Server 将发出具有范围的 OAuth 令牌<scopeName>

于 2021-02-10T18:29:15.653 回答