| Воскресенье, 2 июня, 2013
Метки: ASP.NET MVC, SimpleMembership, oAuth Комментарии: 1
Осталось реализовать два метода класса VKontakteAuthenticationClient. Не вдаваясь в подробности приведем этот код:
private string redirectUri;
void IAuthenticationClient.RequestAuthentication(HttpContextBase context, Uri returnUrl)
{
var APP_ID = this.appId;
this.redirectUri = context.Server.UrlEncode(returnUrl.ToString());
var address = String.Format(
"https://oauth.vk.com/authorize?client_id={0}&redirect_uri={1}&response_type=code",
APP_ID, this.redirectUri
);
HttpContext.Current.Response.Redirect(address, false);
}
class AccessToken
{
public string access_token = null;
public string user_id = null;
}
class UserData
{
public string uid = null;
public string first_name = null;
public string last_name = null;
public string photo_50 = null;
}
class UsersData
{
public UserData[] response = null;
}
AuthenticationResult IAuthenticationClient.VerifyAuthentication(HttpContextBase context)
{
try
{
string code = context.Request["code"];
var address = String.Format(
"https://oauth.vk.com/access_token?client_id={0}&client_secret={1}&code={2}&redirect_uri={3}",
this.appId, this.appSecret, code, this.redirectUri);
var response = VKontakteAuthenticationClient.Load(address);
var accessToken = VKontakteAuthenticationClient.DeserializeJson<AccessToken>(response);
address = String.Format(
"https://api.vk.com/method/users.get?uids={0}&fields=photo_50",
accessToken.user_id);
response = VKontakteAuthenticationClient.Load(address);
var usersData = VKontakteAuthenticationClient.DeserializeJson<UsersData>(response);
var userData = usersData.response.First();
return new AuthenticationResult(
true, (this as IAuthenticationClient).ProviderName, accessToken.user_id,
userData.first_name + " " + userData.last_name,
new Dictionary<string, string>());
}
catch (Exception ex)
{
return new AuthenticationResult(ex);
}
}
public static string Load(string address)
{
var request = WebRequest.Create(address) as HttpWebRequest;
using (var response = request.GetResponse() as HttpWebResponse)
{
using (StreamReader reader = new StreamReader(response.GetResponseStream()))
{
return reader.ReadToEnd();
}
}
}
public static T DeserializeJson<T>(string input)
{
var serializer = new JavaScriptSerializer();
return serializer.Deserialize<T>(input);
}
}
Для проверки приложения, запустим его, зайдем на страницу авторизации. Нажимаем кнопку «ВКонтакте» и регистрируемся.
Copyright © CodeHint.ru 2013-2025 (v2.4.7 - работает на Angular Universal)Калькулятор инвест-портфеля