PDA

View Full Version : API Single Sign On


daniel.castro
07-31-2013, 04:27 PM
I have seen numerous older posts regarding this topic with no satisfactory answers to my specific issue. I am attempting the age old problem of single sign on, as well as retrieving forum posts.

vBulletin 5 and 4 were released with a Mobile API.
http://www.vbulletin.com/vbcms/content.php/334-mobile-api?

The API contains every method I need to integrate my existing site.
http://www.vbulletin.com/vbcms/content.php/352-Method-List
http://www.vbulletin.com/vbcms/content.php/365-User-Related-Methods

It appears the Mobile API does not work in vB5. I opened a ticket with vBulletin support and they claim because they do not have vB5 Mobile API documentation, they can not help me and to use vb4 instead. This is not acceptable and I have a phone call into their support right now. I had to leave a message because it would not put me in a queue for the next available person.

Anyhow, I have written a test application and have been able to call api_init, initiate a connection and receive the proper response per the API documentation for both vB5 and vB4.

My test application is a windows form application written in C#. My signature code is:

string signature = RequestParameters.GetRequestQueryString() + ApiAccessToken + ApiClientId + Secret + ApiKey;

MD5 md5Hasher = MD5.Create();

byte[] hash = md5Hasher.ComputeHash(Encoding.ASCII.GetBytes(sign ature));

return BitConverter.ToString(hash).Replace("-", "").ToLower();

For my test I am using the plain text password option so I know for a fact the username and password are correct.

In vB5, I simply get a The remote server returned an error: (404) Not Found. Almost as if the internal API is redirecting to a missing file.

In vB4, when I POST (as per the API docs) I receive invalid_api_signature, but with a GET I receive badlogin.

My setup is such:

vBulletin 5.0.3
vBulletin 4.2.1

Server Type WINNT
Web Server IIS v7 (cgi-fcgi)
PHP 5.3.24
MySQL Version 5.6.12

Can anyone out there help me? Has anyone ever been able to get the Mobile API to work in any version of vBulletin in any environment (php, java, c#, etc.)?


Thanks,

Dan

daniel.castro
07-31-2013, 04:39 PM
UPDATE: If the encoding of my POST parameters is ASCII, I receive invalid_api_signature. If the encoding is Unicode, I receive The remote server returned an error: (404) Not Found.

--------------- Added 1375305081 at 1375305081 ---------------

UPDATE: vB4 authentication is working. Signature must include all parameters sent as url parameters except api_sig, api_c, api_s and api_v. During POST send in url and as post parameters.

magicwalker
11-18-2013, 06:20 AM
I cannot find any documentation for API and did not explain well. Now my product stuck on because lack of support on vbulletin 5.05
- login
- login
- new user creation.......

I really don't know how to solve since the API documentation for 5.05 but claim good support on API.

bravura
12-11-2013, 12:52 PM
UPDATE: If the encoding of my POST parameters is ASCII, I receive invalid_api_signature. If the encoding is Unicode, I receive The remote server returned an error: (404) Not Found.

--------------- Added 1375305081 at 1375305081 ---------------

UPDATE: vB4 authentication is working. Signature must include all parameters sent as url parameters except api_sig, api_c, api_s and api_v. During POST send in url and as post parameters.

Hello,

Can you please help me on creating the api_sig in vB4 using C#. I am getting this error: invalid_api_signature. I am using the below C# code

Code
=============

apiVersion = HttpUtility.UrlEncode(apiVersion);
apiAccessToken = HttpUtility.UrlEncode(apiAccessToken);
vBulletinVersion = HttpUtility.UrlEncode(vBulletinVersion);
apiClientId = HttpUtility.UrlEncode(apiClientId);
secret = HttpUtility.UrlEncode(secret);
apiKey = HttpUtility.UrlEncode(apiKey);

using(MD5 md5Hash = MD5.Create())
{
md5Password = GetMD5Hash(md5Hash, password);
}

string login_string = "api_m=login_login" + "&vb_login_username=" + userName + "&vb_login_md5password=" + md5Password;

using (MD5 md5Hash = MD5.Create())
{
api_sig = GetMD5Hash(md5Hash, login_string + apiAccessToken + apiClientId + secret + apiKey);
api_sig = HttpUtility.UrlEncode(api_sig);
}

String login_request = "vb_login_username=" + userName + "&vb_login_md5password=" + md5Password + "&cookieuser=true";

String request = "?api_c=" + apiClientId + "&api_v=" + apiVersion + "&api_m=login_login" + "&api_s=" + apiAccessToken + "&api_sig=" + api_sig;
url = url + request;
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);

req.Method = "POST";
req.ContentType = "application/x-www-form-urlencoded";
req.ContentLength = login_request.Length;
CookieContainer a = new CookieContainer();
req.CookieContainer = a;
System.Net.ServicePointManager.Expect100Continue = false; // prevents 417 error
using (StreamWriter writer = new StreamWriter(req.GetRequestStream(), System.Text.Encoding.ASCII))
{
writer.Write(login_request);
}

response = (HttpWebResponse)req.GetResponse();
using (StreamReader reader = new StreamReader(response.GetResponseStream()))
{
//cookie = reader.ReadToEnd();
JavaScriptSerializer js = new JavaScriptSerializer();
jsonResp = js.Deserialize<Dictionary<string, object>>(reader.ReadToEnd());
}




Thanks