Как отправить с сервера на сервер в ASP.NET - PullRequest
1 голос
/ 04 августа 2011

В настоящее время я пытаюсь импортировать контакт электронной почты клиента из 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);
        }

1 Ответ

1 голос
/ 28 апреля 2012
Dim client As New WebClient()
            Dim values As New NameValueCollection()
            values.Add("code", Request.QueryString("code"))
            values.Add("client_id", "client-id")
            values.Add("client_secret", "secret-key")
            values.Add("redirect_uri", "url/")
            values.Add("grant_type", "authorization_code")

            Dim responseS As Byte() = client.UploadValues("https://accounts.google.com/o/oauth2/token", values)

            Response.Write(Encoding.UTF8.GetString(responseS))
...