Tag: 认证

春季启动。 HMAC认证。 如何添加自定义AuthenticationProvider和身份validationfilter?

为了实现HMAC身份validation,我创建了自己的filter,提供者和令牌。 RestSecurityFilter: public class RestSecurityFilter extends AbstractAuthenticationProcessingFilter { private final Logger LOG = LoggerFactory.getLogger(RestSecurityFilter.class); private AuthenticationManager authenticationManager; public RestSecurityFilter(String defaultFilterProcessesUrl) { super(defaultFilterProcessesUrl); } public RestSecurityFilter(RequestMatcher requiresAuthenticationRequestMatcher) { super(requiresAuthenticationRequestMatcher); } @Override public Authentication attemptAuthentication(HttpServletRequest req, HttpServletResponse response) throws AuthenticationException, IOException, ServletException { AuthenticationRequestWrapper request = new AuthenticationRequestWrapper(req); // Get authorization headers String signature = request.getHeader(“Signature”); String […]

使用Spring对安全性使用LDAP进行身份validation

我正在尝试使用spring-security来获取Java应用程序,以便与我设置的本地ADAM实例进行通信。 我已成功安装ADAM并设置如下…. 在localhost上运行的实例:389 根是O=Company 一个叫OU=Company Users (orgnizationalUnit)的孩子 一个名为CN=Mike Q (用户)的granchild uid = mike和password = welcome 然后我设置了spring-security(版本3.0.3,spring-framework 3.0.4和spring-ldap 1.3.0)。 spring文件 和TestAuthentication public class TestAuthentication { @Autowired private AuthenticationManager authenticationManager; public void initialise() { Authentication authentication = new UsernamePasswordAuthenticationToken( “mike”, “welcome” ); Authentication reponseAuthentication = authenticationManager.authenticate( authentication ); } } 运行这个我得到以下错误 Caused by: javax.naming.AuthenticationException: [LDAP: error code […]

使用Kerberos身份validation从Java应用程序访问SharePoint网站

我试图从Java应用程序访问SharePoint网站。 SharePoint服务器更喜欢Kerberos身份validation。 能否请您提供仅实施Kerberos身份validation的示例?

Java代理身份validation

我有一个在Tomcat 6中运行的Java webapp,它从远程URL加载RSS提要。 我使用罗马为我处理RSS源和不同的格式。 连接部分看起来像这样: try{ feedSource = new URL(rssObject.getAsset()); }catch(MalformedURLException mue){ logger.error(…); throw mue; } try{ URLConnection connection = feedSource.openConnection(); feed = new SyndFeedInput().build(new XmlReader(connection)); }catch(Exception){handle…} 代码工作正常,除了在这个新客户端,他们使用代理。 为了使用代理,我设置了http.proxyHost和proxyPort系统属性: System.setProperty(“http.proxyHost”, proxyHost); System.setProperty(“http.proxyPort”, proxyPort); System.setProperty(“https.proxyHost”, proxyHost); System.setProperty(“https.proxyPort”, proxyPort); HTTP GET是代理好的,但现在我收到HTTP 502错误(坏网关或类似的东西)。 分析与Wireshark的HTTP交换,我注意到代理需要身份validation。 它发送HTTP 507. Java以某种方式尝试进行身份validation,但它使用了错误的用户名和密码。 它似乎使用主机名作为用户名,对于我不知道的密码。 所以我尝试实现Authenticator方法来指定用户名+密码: Authenticator.setDefault(new Authenticator() { @Override protected PasswordAuthentication getPasswordAuthentication() { logger.info(MessageFormat.format(“Generating […]

在Java服务器中validationWindows用户

我正在研究用Java编写的服务器和一个在同一网络上的Windows机器上运行的客户端(用.Net编写的桌面应用程序)。 我希望有一些基本的身份validation,以便服务器可以确定运行客户端的用户的用户名,而无需用户在客户端重新输入他们的Windows密码。 这是可能的,实现它的最简单方法是什么? 我看了一些可用的API,看起来好像Java中的org.ietf.jgss包和.Net中的NegotiateStream类,应该可以相互通信来实现这一点 – 但我一直在打击令人沮丧的错误消息我不明白。 我想我会检查这是否是正确的方法,如果是这样的话,我会发布一个单独的问题,更详细地说明有问题的错误:)

请确保至少有一个领域可以对这些令牌进行身份validation

所以我已经设置了我的shiro有两个领域。 用户名和密码域,使用标准UsernamePasswordToken。 我还设置了一个自定义承载认证令牌,用于处理从用户传入的令牌。 如果我只是使用我的passwordValidatorRealm它可以找到,如果没有找到用户会抛出未知帐户,如果密码不匹配则抛出不正确的凭据,完美。 但是只要我输入我的tokenValidatorRealm它就会抛出一个 org.apache.shiro.authc.AuthenticationException: Authentication token of type [class org.apache.shiro.authc.UsernamePasswordToken] could not be authenticated by any configured realms. 在这个例子中,我的tokenValidatorRealm返回null,因为没有提供令牌,所以它继续前进到passwordValidatorRealm并且只是中断。 为什么引入第二个领域的任何想法都会导致我的工作密码ValidatorRealm破坏? 尝试过不同的身份validation策略,但没有运气。 使用shiro 1.2.2 编辑 我有两个实现,一个用于密码,一个用于令牌 密码: public class PasswordAuthorizingRealm extends AuthenticatingRealm { @Override protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken) throws AuthenticationException { if (authenticationToken instanceof UsernamePasswordToken) { UsernamePasswordToken usernamePasswordToken = (UsernamePasswordToken) authenticationToken; String username = […]

Spring Security:如果身份validation失败,则重定向到登录页面

我们有两种登录方式。 用户名和密码由请求标头中的另一个应用程序发送。 检查IT,如果用户名和密码正确,则进入。[为此编写自定义filter] 如果请求标头中不存在用户名和密码,则会显示登录屏幕。 当用户名和密码出现在请求标头中且错误时,我会看到HTTP状态401 – 身份validation失败:错误的凭据页面。 如果身份validation失败,如何让它显示登录页面。 下面是security.xml中的代码 如果您需要更多信息,请与我们联系。 编辑:在我的应用程序中添加RequestHeaderfilter的代码 public class RequestHeaderProcessingFilter extends AbstractAuthenticationProcessingFilter{ private String usernameHeader = “j_username”; private String passwordHeader = “j_password”; protected RequestHeaderProcessingFilter() { super(“/login_direct”); } //getters and setters @Override public Authentication attemptAuthentication(HttpServletRequest request, HttpServletResponse response) throws AuthenticationException, IOException, ServletException { String username = request.getHeader(usernameHeader); String password = request.getHeader(passwordHeader); SignedUsernamePasswordAuthenticationToken […]

Spring MVC 3.0基本身份validation实现

我正在使用来自ASP.NET的Spring MVC框架将我的Web应用程序转换为Java(虽然这是学习它的好方法 – :))我需要在我的应用程序中实现身份validation:请告诉我,我的方法是否良好且足够专业,如果不是这样做的最佳做法: 首先,我正在编写User class,其中包含有关当前用户firstname / lastname / email / id / etc的所有信息…. class User implements Serializable{ private String firstName; private String lastName; private Long id; private String email; ///Settters and Getters } 我正在实现名为DlSession的类并在sesison级别上实现它。 class DlSession implements Serializable{ private User currentUser; public DlSession(){} // getters and setters: } 当用户提交他的用户/通行证时,我正在validation凭证,以及用户是否存在将所有用户数据检索到User类的实例。 然后我将Session中的currentUser设置为我检索到的用户: mySesison.setCurrentUser(user); 为了validation身份validation,我需要检查: if (mySession.getcurrentUser() […]

使用HTTP客户端的Kerberos连接

我正在使用Kerberos身份validation编写HTTP连接。 我有“HTTP / 1.1 401 Unauthorized”。 你能告诉我应该检查什么吗? 我认为有一些想法,但我没有看到它。 可能我应该用“Negotiate”设置标题“WWW-Authenticate”? 非常感谢您提供任何帮助和想法。 public class ClientKerberosAuthentication { public static void main(String[] args) throws Exception { System.setProperty(“java.security.auth.login.config”, “login.conf”); System.setProperty(“java.security.krb5.conf”, “krb5.conf”); System.setProperty(“sun.security.krb5.debug”, “true”); System.setProperty(“javax.security.auth.useSubjectCredsOnly”,”false”); DefaultHttpClient httpclient = new DefaultHttpClient(); try { NegotiateSchemeFactory nsf = new NegotiateSchemeFactory(); httpclient.getAuthSchemes().register(AuthPolicy.SPNEGO, nsf); List authpref = new ArrayList(); authpref.add(AuthPolicy.BASIC); authpref.add(AuthPolicy.SPNEGO); httpclient.getParams().setParameter(AuthPNames.PROXY_AUTH_PREF, authpref); httpclient.getCredentialsProvider().setCredentials( new AuthScope(null, […]

使用sessionId或用户名+密码进行Shiro身份validation

我在Java身份validation框架和身份validation工作流程方面没有太多经验(只有一些理论知识),所以出于教育目的,我正在尝试为我的HTTP应用程序创建这种类型的身份validation: 客户端将登录名+密码发布到/login 。 Shiro通过给定的凭据登录用户。 服务器返回客户端他的sessionId 。 客户端请求某种资源/myresource?sessionId=1234567 。 Shiro通过给定的sessionId登录Subject。 然后,服务器执行获取/myresource的常规工作流程(使用Shiro管理方法级访问权限)。 基本上我有这些问题: 我想我不需要HTTP会话也不需要Servlet会话。 Shiro拥有自己的会话管理器,足以满足我的需求。 我错了吗? 给客户端提供真正的sessionId或者我应该发送某种sessionToken(在服务器端解析为sessionId)是一种好的做法吗? 如何使用sessionId(客户端应在本地存储)登录主题? 在进行这种身份validation之前还有其他我需要知道的事情吗? 提前致谢。