mfp中范围元素中的安全检查有啥关系?
Posted
技术标签:
【中文标题】mfp中范围元素中的安全检查有啥关系?【英文标题】:What is the relationship between security check in scope element in mfp?mfp中范围元素中的安全检查有什么关系? 【发布时间】:2021-02-10 17:46:09 【问题描述】:早安,
在我的适配器中,我配置了一个securityCheckDefinition
,如下所示:
<securityCheckDefinition name="UserAuthentication" class="com.mobile.authentication.UserAuthentication">
<property name="maxAttempts" defaultValue="3" description="How many attempts are allowed"/>
</securityCheckDefinition>
在我的 mfp 控制台应用程序中,在“安全”选项卡下,我配置了一个范围调用 push.mobileclient
。
在我的前端代码中,我调用 mfp 登录方法如下以使用 mfp“验证”我的客户端:
WLAuthorizationManager.login('UserAuthentication', authObj)
我看到我的 .handleSuccess() 被触发,这意味着“身份验证”部分是成功的。 (如果我错了,请纠正我。)
在.handleSuccess()之后,我调用mfp的getAccessToken()方法来检查我的客户端是否已经通过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 是@987654331 @, 2 个不同的东西,WLAuthorizationManager.obtainAccessToken('push.mobileclient')
怎么知道我的客户已经“注册/验证”成功了?
【问题讨论】:
【参考方案1】:当您触发 WLAuthorizationManager.login(SecurityCheckName, authObj)
时,您正在使用 MobileFirst Server 对用户进行身份验证。您正在创建一个 AuthenticatedUser
对象并设置一个 AuthenticationContext。此过程创建保留在服务器中的身份验证状态并将响应发送到客户端。在客户端,响应进入 ChallengeHandler 类中的handleSuccess()
方法,这样就完成了身份验证流程。
稍后,当您调用 WLAuthorizationManager.obtainAccessToken(scopename)
时,您请求 MobileFirst 授权服务器为范围 <scopename>
颁发 OAuth 令牌。在你的情况下,"push.mobileclient"
。
如果在 MobileFirst 管理控制台中定义了范围,但未映射到安全检查(在您的情况下为 UserAuthentication
),MobileFirst Server 会为范围 <scopeName>
发出 OAuth 令牌。
MobileFirst 服务器如何知道客户端已经注册或验证?
MobileFirst 服务器保留客户端的注册和身份验证状态。即使没有登录自定义安全检查,MobileFirst 服务器也会应用默认的安全级别并维护身份验证状态。当客户端登录到自定义安全检查时,MobileFirst 服务器会使用此信息更新身份验证状态。这样,身份验证状态将与所有信息保持一致,直到过期或客户端注销。
但是,在 MobileFirst 控制台中,如果范围被映射到安全检查(例如 UserAuthentication),那么首先 MobileFirst 服务器会检查您是否已经登录到 UserAuthentication(您首先进行的登录)并且身份验证上下文仍然有效(未过期)。如果是这样,MobileFirst Server 将继续使用 <scopeName>
发出 OAuth 令牌。
如果不是,MobileFirst Server 首先要求您进行身份验证。此挑战将到达 ChallengeHandler 类的 handleChallenge()
方法。一旦质询-响应成功完成并且流程进入handleSuccess()
,MobileFirst Server 将颁发范围为<scopeName>
的OAuth 令牌。
【讨论】:
嗨 Vivin,非常感谢您的解释。对于最后一段,then first MobileFirst server checks if you have already logged into UserAuthentication (the login you did first) and the authentication context is still valid (not expired)
,正确地说,如果我看到 handleSuccess() 被触发,意味着我已经登录对吗?现在的问题是,即使我成功登录,我也没有得到 gainAccessToken() 的响应。而且我不确定为什么会触发 handleChallenge(),你有什么想法吗?以上是关于mfp中范围元素中的安全检查有啥关系?的主要内容,如果未能解决你的问题,请参考以下文章
ColdFusion 中的 THIS 范围和 APPLICATION 范围有啥区别?
Git diff 提交范围中的双点“..”和三点“...”有啥区别? [复制]