Аутентификация отдела продаж с веб-страницы ASP.Net C # - PullRequest
1 голос
/ 24 августа 2011

Я использую OAuth 2.0 для аутентификации моего сайта в отделе продаж.Я скачал и запустил пример кода Java, и он работал нормально.Теперь мне нужно сделать то же самое с веб-страницы ASP.Net, но она не работает.Когда я выполняю последний POST для получения токена доступа, он выдает ошибку System.Net.WebException: удаленный сервер возвратил ошибку: (400) Bad Request.

Я использую тот же метод httppost, как упомянутопо этой ссылке здесь .Для подробностей код, который делает пост ниже.

public partial class Authenticate2 : System.Web.UI.Page
{
    private string tokenUrl;
    protected void Page_Load(object sender, EventArgs e)
    {
        Logger.LogInfoMessage("I am Authenticate 2");
        string code = Request["code"];
        Logger.LogInfoMessage("Code is: " + code);
        string parameters = "code=" + code
            + "&grant_type=authorization_code"
            + "&client_id=" + Authenticate.CONSUMER_KEY
            + "&client_secret=" + Authenticate.CONSUMER_SECRET
            + "&redirect_uri" + Authenticate.REDIRECT_URL;
        string result = HttpPost(tokenUrl, parameters);
        Logger.LogInfoMessage(result);
    }
    protected override void OnInit(EventArgs e)
    {
        base.OnInit(e);
        tokenUrl = Authenticate.ENVIRONMENT + "/services/oauth2/token";
    }
    public string HttpPost(string URI, string Parameters)
    {
        System.Net.WebRequest req = System.Net.WebRequest.Create(URI);
        req.ContentType = "application/x-www-form-urlencoded";
        req.Method = "POST";

        // Add parameters to post
        byte[] data = System.Text.Encoding.ASCII.GetBytes(Parameters);
        req.ContentLength = data.Length;
        System.IO.Stream os = req.GetRequestStream();
        os.Write(data, 0, data.Length);
        os.Close();

        // Do the post and get the response.
        System.Net.WebResponse resp = req.GetResponse();
        if (resp == null) return null;
        System.IO.StreamReader sr = new System.IO.StreamReader(resp.GetResponseStream());
        return sr.ReadToEnd().Trim();
    }
}

Класс проверки подлинности просто выполняет перенаправление согласно этому:

public partial class Authenticate : System.Web.UI.Page
{
    public const string CONSUMER_KEY = "XXX";
    public const string CONSUMER_SECRET = "XXX";
    public  const string REDIRECT_URL = "https://localhost/authenticate2.aspx";
    public  const string ENVIRONMENT = "https://test.salesforce.com";

    public  const string ACCESS_TOKEN = "ACCESS_TOKEN";
    public  const string INSTANCE_URL = "INSTANCE_URL";
    public  const string INVOICE_ID = "invoiceId";

    private string authenticateUrl = null;

    protected void Page_Load(object sender, EventArgs e)
    {
        Logger.LogInfoMessage("I am in Authenticate");
        string accessToken = (string)Session[ACCESS_TOKEN];
        Logger.LogInfoMessage("Access Token is:" + accessToken);
        if (accessToken == null)
        {
            Logger.LogInfoMessage("Redirecting to:" + authenticateUrl);
            Response.Redirect(authenticateUrl);
            return;
        }
    }
    protected override void OnInit(EventArgs e)
    {
        base.OnInit(e);
        authenticateUrl = ENVIRONMENT
                + "/services/oauth2/authorize?response_type=code&client_id="
                + CONSUMER_KEY + "&redirect_uri="
                + HttpUtility.UrlEncode(REDIRECT_URL, System.Text.Encoding.UTF8);
    }
}

Снимок экрана с ошибкой, которую я получаю, выглядит следующим образом:

The Screen Shot of the error

Ответы [ 3 ]

2 голосов
/ 25 августа 2011

Когда вы строите строку параметров, вам нужно URL-кодировать каждое из значений параметров. Вы также можете перехватить WebException и прочитать тело ответа, в котором также будет больше информации о проблеме.

0 голосов
/ 19 августа 2017

Существует javascript-версия реализации oAuth API Salesforce, но вы можете использовать ее для понимания процесса аутентификации: https://www.youtube.com/watch?v=ULWBdjJx1Ss

В видео описан процесс STEP BY STEP, необходимый для получения токена и использования его для полученияданные.

0 голосов
/ 30 июля 2014

Ваши параметры HTTPPost составлены неправильно, поэтому запрос возвращается с «неправильным запросом»:

string parameters = "code=" + code
            + "&grant_type=authorization_code"
            + "&client_id=" + Authenticate.CONSUMER_KEY
            + "&client_secret=" + Authenticate.CONSUMER_SECRET
            + "&redirect_uri" + Authenticate.REDIRECT_URL;

Вы пропускаете здесь «=»: + "&redirect_uri =" + Authenticate.REDIRECT_URL;

...