Forum Discussion
Password Encoding
I am writing to ask what the appropriate way is to encode a password when locating stubs. The following code snippet was pulled out of an F5 sample file:
m_endpoint = "https://" + args[2] + ":" + args[3] + "@" + args[0] + ":" + args[1] + "/iControl/iControlPortal.cgi";
m_pool = (iControl.LocalLBPoolBindingStub) new iControl.LocalLBPoolLocator().getLocalLBPoolPort(new java.net.URL(m_endpoint));
This will work fine as long as the password does not contain special characters such as the ":" character. Will the following code work or is there a better way?
String endpoint = "https://" + URLEncoder.encode(username, "UTF-8") + ":" + URLEncoder.encode(password, "UTF-8") + "@" + URLEncoder.encode(hostname, "UTF-8") + ":" + port + "/iControl/iControlPortal.cgi";
Regards,
Mark
8 Replies
- Passing the credentials in the URL was something we put as a sample a long long time ago before we had the iControl Library for Java. The proper way is to pass in a WWW-Autheticate HTTP header with an encoded version of the username/password. This is basically how forms based authentication works. I would recommend you go that route and not pass credentials in the URL. The iControl library for Java does just that.
Could you explain what you are trying to do and why you need to pass the credentials in the URL?
-Joe - MarkM_63051
Nimbostratus
I am making Java web service connections to the F5 so I can execute the APIs. Would you please send me a link to the example code you mentioned? - The iControl Library for Java can be found in the "iControl Assembly" labs project.
https://devcentral.f5.com/Community/GroupDetails/tabid/1082223/asg/2/aft/1172123/showtab/groupforums/Default.aspx - MarkM_63051
Nimbostratus
I have been using the iControl library for several months now. I was hoping you had some sample code using the iControl methods or can you point me in the right direction.
Were you referring to something more like this:
LocalLBPoolBindingStub lblPool =
(LocalLBPoolBindingStub)getLocalLBPoolLocator().getLocalLBPoolPort(new java.net.URL
("https://bogusName:bogusPassword@16.124.134.131:443/iControl/iControlPortal.cgi"));
lblPool.setPassword("aexxxx");
lblPool.setUsername("admin");
lblPool.setTimeout(Globals.IDLE_TIMEOUT); The source distribution includes some test code. Here's some code to get the system information.
iControl.Interfaces m_interfaces = new iControl.Interfaces();
m_interfaces.initialize("x.x.x.x", 443, "user", "pass");
iControl.SystemSystemInformation sysInfo = m_interfaces.getSystemSystemInfo().get_system_information();
System.out.println("======================================================");
System.out.println(" System Information");
System.out.println("------------------------------------------------------");
System.out.println("System Name : " + systemInformation.getSystem_name());
System.out.println("Host name : " + systemInformation.getHost_name());
System.out.println("OS Release : " + systemInformation.getOs_release());
System.out.println("OS Machine : " + systemInformation.getOs_machine());
The iControl.Interfaces class encapsulates all of the interfaces and bindings long with the connection details.
-Joe
- MarkM_63051
Nimbostratus
Thanks Joe,
It worked wonderfully. I removed about 20 lines of code per class and JUnit test. Here is a sample of what I ended up with:
// Get the master F5 Interface connection object/stub
iControl.Interfaces f5Iinterfaces = getF5Interfaces();
f5Iinterfaces.initialize(hostname, 443, username, password);
public void createOrDeletePool(Properties argProps, Interfaces f5Iinterfaces) {
// Create the F5 stubs necessary to communicate with it
LocalLBPoolBindingStub lblPoolStub = f5Iinterfaces.getLocalLBPool();
} - Great, glad I could help and glad I helped clean up your codebase!
The Interfaces class is not part of the API, but a wrapper I wrote to hide all the messy stuff. The source is in the source package if you want to see what's going on in there. Guess I need to document that a little better moving forward B-).
BTW, don't hesitate to post any questions that come up. I'm not the best at Java, but know enough to help get you out of trouble.
Also, our CodeShare section is lacking in good Java code samples. If you have any you'd consider sharing, I'd be glad to pretty them up and put them up for others to use...
-Joe - MarkM_63051
Nimbostratus
I would like to let the experts beat on my code and make it better, but I need wait to see what our company lawyers have to say.
Recent Discussions
Related Content
* Getting Started on DevCentral
* Community Guidelines
* Community Terms of Use / EULA
* Community Ranking Explained
* Community Resources
* Contact the DevCentral Team
* Update MFA on account.f5.com
