2013-07-18 2 views
0

У меня возникла проблема с вызовом сервера идентификации из приложения для Android. Проблема в том, что я искал способ вызвать IdSrv из чего-либо другого, кроме приложения на основе C#, и нашел только пример того, как вызвать его из JS. Таким образом, это как вызов сделан из JS:Позвоните в ThinkTecture IdentiyServer из приложения Android

function HttpBasicClient(uid, pwd) { 
      this.scheme = "Basic"; 
      this.token = Base64.encode(uid + ":" + pwd); 
     } 
     HttpBasicClient.prototype.get = function (url) { 
      var scheme = this.scheme; 
      var token = this.token; 
      var settings = { 
       type: "GET", 
       url: url, 
       beforeSend: function (xhr) { 
        xhr.setRequestHeader("Authorization", scheme + " " + token); 
       } 
      }; 

И это мой перевод на Android:

HttpClient client = getCustomHttpClient(); 
     HttpResponse response; 
     String scheme = "Basic"; 
     String token = Base64.encodeToString((username+":"+password).getBytes(), 0); 
     try{ 
      HttpGet get = new HttpGet("https://url/issue/wstrust/mixed/username"); 
      get.setHeader("Authorization", scheme + " " + token); 
      response = client.execute(get); 
      StatusLine sLine = response.getStatusLine(); 
      int statusCode = sLine.getStatusCode(); 

Я использую пользовательский HttpClient, который принимает все типы сертификатов, поэтому SSL не должен быть проблемой. Проблема в том, что при вызове Http 400 возвращается ко мне, что говорит о том, что запрос искажен. Мой вопрос: кто-нибудь знает, как именно призыв к Identity Server должен быть сделан, чтобы он принял его и вернул мне токен?

+0

Вы уверены, что хотите вызвать WS-Trust конечной точки? – leastprivilege

+0

Да, я уверен. Я также посмотрел трафик, поступающий на сервер (в wirehark). Запросы, поступающие от моего клиента, выглядят нормально, но когда сервер пытается отправить ответные ответы, я всегда получаю контрольную сумму заголовка: 0x0000 с Message: Bad контрольной суммой. –

+0

WS-trust - конечная точка мыла. И не получите + заголовок авторизации. – leastprivilege

ответ

0

Вы предпочитаете использовать конечную точку OAuth2 - скорее всего, используя поток владельца ресурса. Проверьте вики для образцов:

https://github.com/thinktecture/Thinktecture.IdentityServer.v2/wiki

конкретно:

http://leastprivilege.com/2012/11/01/oauth2-in-thinktecture-identityserver-v2-resource-owner-password-flow/

+0

Ну, это может сделать трюк. Но что, если у меня нет настроенных конечных точек OAuth2? В метафайле Identity Server есть только конечные точки WS-Trust. Так что, если я позвоню в IdSrv с конечной точкой WS-Trust, мне нужно вызвать его SOAP-способом? –

+0

Не обращайте внимания на WS-Trust, мы сконфигурировали конечную точку OAuth2. –

Смежные вопросы