я играю в одну игру по названием world of warcraft,есть необходимость сделать GUILD сайт
пишу на mvc c#.
есть необходимость применят OAuth чтобы авторизация происходило через battle.net.
прочитал что из себя представляет OAuth на habrahabr и еще много документации по этой теме.
сам документация по battle.net-у находится тут https://dev.battle.net
есть один запрос каторый дает код авторизации и есть второй запрос который дает токен
1. запрос GET после авторизации отправляет мне код авторизации все хорошо все нормально
2. запрос POST который должен вернут мне токен выдает ошибку =(
все ниже коды который я напишу они тестовые
- Код: Выделить всё
String client_id="7arkdj2n2t6jj2z5cj2t3cbze3f8jyxf";
String client_secret="Ny5UKHd4zcFppqSUwjrxeU9ME7fAXrmY";
Uri TokenEndpoint = new Uri("https://eu.battle.net/oauth/token");
private const string AuthEndpoint = "https://eu.battle.net/oauth/authorize";
- Код: Выделить всё
http://eu.battle.net/oauth/authorize?client_id=7arkdj2n2t6jj2z5cj2t3cbze3f8jyxf&redirect_uri=https://grandtrade.ge/BattleNetAuth/Auth&response_type=code&state=8055100&scope=wow.profile
клиент отправляется по этому адресу его спрашивает логин пасс после пере-направляется на мой сайт
- Код: Выделить всё
https://grandtrade.ge/BattleNetAuth/Auth?code=nanqwjcwwk9ptwe3bj7nbxu6&state=8055100
AuthCode=nanqwjcwwk9ptwe3bj7nbxu6;
---------------------------------------------------
- Код: Выделить всё
string Data="grant_type=authorization_code&authorization_code=nanqwjcwwk9ptwe3bj7nbxu6&redirect_uri=https://grandtrade.ge/BattleNetAuth/Token&scope=wow.profile&client_id=7arkdj2n2t6jj2z5cj2t3cbze3f8jyxf&client_secret=Ny5UKHd4zcFppqSUwjrxeU9ME7fAXrmY";
String Signature=FromBase64Encode(client_id, client_secret);
String Token=PostURL(TokenEndpoint .ToString(),Data,Signature)
после этого вызова выдает ошибку The remote server returned an error: (400) Bad Request.
потом посмотрел через Fiddler там в
TextView ={"error":"invalid_grant","error_description":"Authorization code is invalid"}
Auth=No Authorization Header is present.
если я убираю
- Код: Выделить всё
Request.ContentLength = BinData.Length;
TextView ={"error":"invalid_grant","error_description":"Authorization code is invalid"}
Auth=Authorization Header is present: Basic N2Fya2RqMm4ydDZqajJ6NWNqMnQzY2J6ZTNmOGp5eGY6Tnk1VUtIZDR6Y0ZwcHFTVXdqcnhlVTlNRTdmQVhybVk=
Decoded Username:Password= 7arkdj2n2t6jj2z5cj2t3cbze3f8jyxf:Ny5UKHd4zcFppqSUwjrxeU9ME7fAXrmY
- Код: Выделить всё
public string PostURL(string URL, string data, string signature = "") {
string result;
try {
HttpWebRequest Request = (HttpWebRequest)HttpWebRequest.Create(URL);
Request.PreAuthenticate = true;
byte[] BinData = System.Text.Encoding.UTF8.GetBytes(data);
Request.Method = WebRequestMethods.Http.Post;
Request.ContentType = "application/x-www-form-urlencoded;charset=UTF-8";
Request.ContentLength = BinData.Length;
Request.GetRequestStream().Write(BinData, 0, BinData.Length);
Request.Headers.Add("Authorization", signature);
HttpWebResponse Response = (HttpWebResponse)Request.GetResponse();
StreamReader Reader = new StreamReader(Response.GetResponseStream(), Encoding.GetEncoding(1251));
string redirect = Response.ResponseUri.ToString();
result = Reader.ReadToEnd();
} catch (Exception ex) {
return ex.Message;
}
return result;
}
public string FromBase64Encode(string clientid, string secret) {
string result;
string temp = clientid + ":" + secret;
byte[] b = System.Text.Encoding.Default.GetBytes(temp);
result = "Basic " + Convert.ToBase64String(b);
return result;
}
кто чем может помочь помогите,заранее благодарен