В настоящее время я пытаюсь импортировать контакт электронной почты клиента из Gmail.
Я использую OAuth 2.0 для аутентификации между Google и пользователем в соответствии с документом
http://code.google.com/apis/accounts/docs/OAuth2.html
Сначала я отправляю запрос GET в Google, используя
https://accounts.google.com/o/oauth2/auth?scope=https://www.google.com/m8/feeds&
client_id=yyyyyyyy.apps.googleusercontent.com&
redirect_uri=http%3A%2F%2Flocalhost%3A11195%2Fhome%2Fgreturn&response_type=code
тогда ответ Google с этим
http://localhost/home/greturn?code=4/P7q7W91a-oMsCeLvIaQm6bTrgtp6
Вот код в ASP.NET MVC
В Views / Index.cshtml
javascript:popup('https://accounts.google.com/o/oauth2/auth?scope=https://www.google.com/m8/feeds&client_id=yyy.apps.googleusercontent.com&redirect_uri=http%3A%2F%2Flocalhost%3A11195%2Fhome%2Fgreturn&response_type=code');
и Google перенаправляют обратно на дом / обратно с параметром «код». (например: code = 4 / P7q7W91a-oMsCeLvIaQm6bTrgtp6)
Это greturn () в домашнем контроллере
public ActionResult GReturn()
{
string token = Request.QueryString["code"];
OAuth auth = new OAuth(token);
IDictionary<string, string> mycontact = oauth.GetGoogleMail("https//accounts.google.com/o/oauth2/token");
return View(mycontact);
}
я храню код в переменной токена
с этого момента я должен снова отправить данные обратно в URL-адрес Google
https://accounts.google.com/o/oauth2/token
с данными
POST /o/oauth2/token HTTP/1.1
Host: accounts.google.com
Content-Type: application/x-www-form-urlencoded
code=4/P7q7W91a-oMsCeLvIaQm6bTrgtp6&
client_id=yyyyyy.apps.googleusercontent.com&
client_secret=zzzzz&
redirect_uri=http://localhost/home/greturn&
grant_type=authorization_code
и в ответ ожидает, что Google отправит обратно объект JSON
"Access_token": "1 / fFAGRNJru1FTz70BzhT3Zg",
"Expires_in": 3920,
"Refresh_token": "1 / 6BMfW9j53gdGImsixUH6kU5RsR4zwI9lUVX-tqf8JXQ"
Вопрос в том, как я могу ПОСТАВИТЬ требуемые данные в указанный URI и получить возвращаемое значение
Это код, который я пытался реализовать, но еще не закончил, поэтому, пожалуйста, посмотрите
public class OAuth
{
private string Token;
public OAuth() { }
public OAuth(string Token)
{
this.Token = Token;
}
public IDictionary<string, string> GetGoogleMail(string LoginUrl)
{
HttpValueCollection loginFormValues = new HttpValueCollection();
loginFormValues["code"] = this.Token;
loginFormValues["client_id"] = "yyyy.apps.googleusercontent.com";
loginFormValues["client_secret"] = "zzzz";
loginFormValues["redirect_uri"] = "http%3A%2F%2Flocalhost%3A11195%2Fhome%2Fgreturn";
loginFormValues["grant_type"] = "authorization_code";
byte[] loginPostData = Encoding.UTF8.GetBytes(loginFormValues.ToString(true));
Uri url = new Uri(LoginUrl);
HttpWebRequest loginRequest = (HttpWebRequest)WebRequest.Create(url);
loginRequest.Method = "POST";
loginRequest.ContentType = "application/x-www-form-urlencoded";
loginRequest.ContentLength = loginPostData.Length;
// Add post data to request
Stream stream;
using (stream = loginRequest.GetRequestStream())
{
stream.Write(loginPostData, 0, loginPostData.Length);
}