Authentication 在发布实例CQ5/AEM上实现servlet身份验证
我有一个方案,任何关于实施的建议都将非常有帮助。我在publish上创建了一个servlet,其中包含来自许多其他第三方应用程序的POST请求。这个servlet只是将传入的发布数据存储在JCR中。我已经成功地创建了这个servlet,但现在的要求是确保这个servlet的安全性,这样只有使用特定用户名和密码访问这个servlet的应用程序才会被接受Authentication 在发布实例CQ5/AEM上实现servlet身份验证,authentication,servlets,aem,Authentication,Servlets,Aem,我有一个方案,任何关于实施的建议都将非常有帮助。我在publish上创建了一个servlet,其中包含来自许多其他第三方应用程序的POST请求。这个servlet只是将传入的发布数据存储在JCR中。我已经成功地创建了这个servlet,但现在的要求是确保这个servlet的安全性,这样只有使用特定用户名和密码访问这个servlet的应用程序才会被接受 我能做些什么来实现这一点?我将采取的方式: 请这些第三方应用程序向您发送用户名和密码,以便您可以在servlet上验证它们,然后决定是否允许或拒绝
我能做些什么来实现这一点?我将采取的方式: 请这些第三方应用程序向您发送用户名和密码,以便您可以在servlet上验证它们,然后决定是否允许或拒绝请求 从servlet调用(第三方应用程序) 在servlet上: 上面的例子是有效的,以防你可以验证他们在你这边 如果此示例无法回答您的问题,请提供有关这些第三方应用程序的更多信息以及您希望验证它们的方式
我会这样做: 请这些第三方应用程序向您发送用户名和密码,以便您可以在servlet上验证它们,然后决定是否允许或拒绝请求 从servlet调用(第三方应用程序) 在servlet上: 上面的例子是有效的,以防你可以验证他们在你这边 如果此示例无法回答您的问题,请提供有关这些第三方应用程序的更多信息以及您希望验证它们的方式
您可以考虑使用谷歌客户端库。我在AEM发布实例中使用它对用户进行身份验证。第三方服务器通过身份验证后,您可以使用单独的AEM服务帐户来处理后期处理
这里有一篇关于将这些库集成到AEM的帖子。 有了它,您应该能够设置第三方服务帐户的身份验证。。。正如这里所讨论的我实际上还没有在AEM中进行服务器到服务器的身份验证,但这应该是可能的。但在一个单独的项目(非AEM)中,我使用了谷歌客户端库来验证服务帐户。 < P>您可以考虑使用谷歌客户端库。我在AEM发布实例中使用它对用户进行身份验证。第三方服务器通过身份验证后,您可以使用单独的AEM服务帐户来处理后期处理 这里有一篇关于将这些库集成到AEM的帖子。 有了它,您应该能够设置第三方服务帐户的身份验证。。。正如这里所讨论的
我实际上还没有在AEM中进行服务器到服务器的身份验证,但这应该是可能的。但在另一个项目(非AEM)中,我使用了Google客户端库来验证服务帐户。我建议使用两步流程:
- 步骤1:身份验证和生成令牌,您也可以使用第三方服务生成令牌
- 步骤2:使用此令牌调用servlet,servlet将首先验证令牌,然后使用post数据
- 步骤1:身份验证和生成令牌,您也可以使用第三方服务生成令牌
- 步骤2:使用此令牌调用servlet,servlet将首先验证令牌,然后使用post数据
- 谢谢大家的回复。最后,我在cq中实现了以下认证代码:
final String authorization=request.getHeader(“authorization”);
if(authorization!=null&&authorization.startsWith(“基本”)){
StringTokenizer st=新的StringTokenizer(授权);
如果(st.hasMoreTokens()){
字符串basic=st.nextToken();
if(基本相等信号情况(“基本”)){
字符串decodedStr=Base64.decode(st.nextToken());
LOGGER.info(“凭证:+decodedStr”);
INTP=解码器的索引(“:”);
如果(p!=-1){
String login=decodedStr.substring(0,p.trim();
字符串密码=decodedStr.substring(p+1.trim();
凭据=新的SimpleCredentials(登录名,密码.tocharray());
adminSession=repository.login(凭证);
if(null!=adminSession){
//意味着在这里做你的事
}
}
}
}
}谢谢大家的回复。最后,我在cq中实现了以下认证代码:
final String authorization=request.getHeader(“authorization”);
if(authorization!=null&&authorization.startsWith(“基本”)){
StringTokenizer st=新的StringTokenizer(授权);
如果(st.hasMoreTokens()){
字符串basic=st.nextToken();
if(基本相等信号情况(“基本”)){
字符串decodedStr=Base64.decode(st.nextToken());
LOGGER.info(“凭证:+decodedStr”);
INTP=解码器的索引(“:”);
如果(p!=-1){
String login=decodedStr.substring(0,p.trim();
字符串密码=decodedStr.substring(p+1.trim();
凭据=新的SimpleCredentials(登录名,密码.tocharray());
adminSession=repository.login(凭证);
if(null!=adminSession){
//意味着在这里做你的事
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// ...
request.setAttribute("username", "a_valid_user");
request.setAttribute("password", "a_valid_password");
request.getRequestDispatcher("yourApp/YourServlet").forward(req, resp);
}
String username = request.getParameter("username");
String password = request.getParameter("password");
if("a_valid_user".equals(username) && "a_valid_password".equals(password) {
// validate and go further
} else {
// do not process the request
}