나는 클라이언트, 인증 서버 (서버, 서버)를 관리하는 최신 릴리스 4.1.0 (nuget를 통해)에서 작동하도록 GetClientAccessToken
흐름을 얻으려고 노력했습니다. 및 리소스 서버.NetworkCredential에 의해 clientIdentifier가 null로 덮어 쓰여진 GetClientAccessToken
프로토 타입을 시작한 상황은 Windows 클라이언트 응용 프로그램 (내 클라이언트 - 결국 WinRT이지만 단순한 MVC 4 응용 프로그램이 될 것입니다.)과 WebAPI 프로젝트. 부분 승인 서버를 동일한 WebAPI 프로젝트의 컨트롤러로 노출시키고 있습니다.
매번 (클라이언트 유형 (예 : UserAgentClient 또는 WebServerClient)과 상관없이 보입니다.) GetClientAccessToken을 요청합니다. 요청이 인증 서버에 요청할 때 요청의 일부로 clientIdentifier가 없으므로 요청이 실패합니다 로 : 나는 DNOA 내가 클라이언트에서 구축하고있어 기본적으로 자격 증명에 소스를 통해 디버깅 한
2012-10-15 13:40:16,333 [41 ] INFO {Channel} Prepared outgoing AccessTokenFailedResponse (2.0) message for <response>:
error: invalid_client
error_description: The client secret was incorrect.
ClientBase.RequestAccessToken
내부 NetworkCredential.ApplyClientCredential
에 의해 전멸 얻고있다. 합리적인 것으로 clientIdentifier를 수정하면 나머지 코드를 추적하여 정확한 조회/확인이 이루어 지므로 인증 서버 코드가 정상임을 확신 할 수 있습니다.
내 테스트 클라이언트는 현재 다음과 같습니다
public class AuthTestController : Controller
{
public static AuthorizationServerDescription AuthenticationServerDescription
{
get
{
return new AuthorizationServerDescription()
{
TokenEndpoint = new Uri("http://api.leave-now.com/OAuth/Token"),
AuthorizationEndpoint = new Uri("http://api.leave-now.com/OAuth/Authorise")
};
}
}
public async Task<ActionResult> Index()
{
var wsclient = new WebServerClient(AuthenticationServerDescription, "KieranBenton.LeaveNow.Metro", "testsecret");
var appclient = new DotNetOpenAuth.OAuth2.UserAgentClient(AuthenticationServerDescription, "KieranBenton.LeaveNow.Metro", "testsecret");
var cat = appclient.GetClientAccessToken(new[] { "https://api.leave-now.com/journeys/" });
// Acting as the Leave Now client we have access to the users credentials anyway
// TODO: CANNOT do this without SSL (turn off the bits in web.config on BOTH sides)
/*var state = client.ExchangeUserCredentialForToken("kieranbenton", "password", new[] { "https://api.leave-now.com/journeys/" });
// Attempt to talk to the APIs WITH the access token
var resourceclient = new OAuthHttpClient(state.AccessToken);
var response = await resourceclient.GetAsync("https://api.leave-now.com/journeys/");
string sresponse = await response.Content.ReadAsStringAsync();*/
// A wrong one
/*var wresourceclient = new OAuthHttpClient("blah blah");
var wresponse = await wresourceclient.GetAsync("https://api.leave-now.com/journeys/");
string wsresponse = await wresponse.Content.ReadAsStringAsync();
// And none
var nresourceclient = new HttpClient();
var nresponse = await nresourceclient.GetAsync("https://api.leave-now.com/journeys/");
string nsresponse = await nresponse.Content.ReadAsStringAsync();*/
return Content("");
}
}
나는이 문제를 방지하는 방법을 알아낼 수 없습니다 또는 디자인에 의해 내가 잘못 뭘하는지합니다.
도움을 주시면 감사하겠습니다.
감사합니다. Andrew - 얼마나 이상한가요? PostParameterApplicator를 대신 사용하는 방법에 대한 예가 있습니까? 클라이언트의 동작 부분을 제어하는 방법을 잘 모르겠습니다. –
스크래치, 나는 그것을하는 방법을 알아 냈다'appclient.ClientCredentialApplicator = ClientCredentialApplicator.PostParameter ("testsecret");'. 감사 앤드류! –
죄송합니다. Andrew - me again. NetworkCredentialApplicator를 작동시키는 방법에 대한 지침이 있습니까? 모든 것을 나는 401을 함정에 넣지 않고 다시 시도했다. –