2015-12-30 3 views
4

Я следил за этим постом: Token Based Authentication using ASP.NET Web API 2, Owin, and Identity. Теперь у меня есть автономный «сервер» веб-API, который может успешно аутентифицировать пользователей и возвращает токен доступа, когда я отправляю ему имя пользователя/пароль. Затем я могу использовать токен доступа для доступа к защищенным данным (в сообщении в блоге я могу получить доступ к Заказу).Как получить код авторизации с OWIN, OAuth и веб-API?

На данный момент клиент, с которого я отправил имя пользователя/пароль, чтобы получить токен доступа, является консольным приложением.

Я хочу добавить немного сложнее и до получения токена доступа, я бы хотел получить код авторизации. Но я не могу найти никакого примера о том, как это сделать. Из того, что я прочитал, я должен отправить запрос GET структурированный, как это:

/авторизовать response_type = код & client_id = < ClientID>

Это то, что я делаю из моего консольного приложения:

using (var client = new HttpClient()) 
{ 
    var response = await client.GetAsync("http://localhost:63828/authorize?response_type=code&client_id=" + Guid.NewGuid()); 

    var responseString = response.Content.ReadAsStringAsync().Result; 
} 

Но я получаю сообщение об ошибке:

Ресурс не найден.

[HttpException]: Контроллер для пути '/authorize ' не был обнаружен или не реализует IController. в System.Web.Mvc.DefaultControllerFactory.GetControllerInstance (RequestContext RequestContext, Тип controllerType) в System.Web.Mvc.DefaultControllerFactory.CreateController (RequestContext RequestContext, Строка controllerName) в System.Web.Mvc.MvcHandler.ProcessRequestInit (HttpContextBase HttpContext , IController & контроллер, IControllerFactory & завод) на System.Web.Mvc.MvcHandler.BeginProcessRequest (HttpContextBase HttpContext, AsyncCallback обратного вызова, состояние объекта) на System.Web.Mvc.MvcHandler.BeginProcessRequest (HttpContext HttpContext, AsyncCallback обратного вызова, объект состояния) в System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.BeginProcessRequest (контекст HttpContext, AsyncCallback cb, объект extraData) на System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() на System.Web.HttpApplication.ExecuteStep (IExecutionStep шаг, булева & completedSynchronously)

Это содержание Startup.cs файл в проекте Web API:

public class Startup 
{ 
    public void Configuration(IAppBuilder app) 
    { 
     HttpConfiguration config = new HttpConfiguration(); 

     ConfigureOAuth(app); 

     WebApiConfig.Register(config); 
     app.UseCors(Microsoft.Owin.Cors.CorsOptions.AllowAll); 
     app.UseWebApi(config); 
    } 

    public void ConfigureOAuth(IAppBuilder app) 
    { 
     OAuthAuthorizationServerOptions OAuthServerOptions = new OAuthAuthorizationServerOptions() 
     { 
      AllowInsecureHttp = true, 
      TokenEndpointPath = new PathString("/token"), 
      AuthorizeEndpointPath = new PathString("/authorize"), 
      ApplicationCanDisplayErrors = true, 
      AccessTokenExpireTimeSpan = TimeSpan.FromDays(1), 
      Provider = new SimpleAuthorizationServerProvider() 
     }; 

     // Token Generation 
     app.UseOAuthAuthorizationServer(OAuthServerOptions); 
     app.UseOAuthBearerAuthentication(new OAuthBearerAuthenticationOptions()); 
    } 
} 

что я нахожу странным, что я определил конечную точку «/ авторизовать», но он не доступен ... The «/ маркер» конечная точка доступна и я сделал не делайте ничего особенного для этого.

Любая идея, как я могу это преодолеть?

ответ

2

Решающим, что нужно помнить при использовании сервера авторизации OAuth2 встроенный в Katana является то, что разрешение конечных точек является сквозная по умолчанию: вы должны предоставить свой собственный /авторизовать конечной точки (с использованием MVC или Нэнси, например) или непосредственно выдать свою форму согласия в OAuthAuthorizationServerProvider.AuthorizationEndpoint.

Вы можете ознакомиться с полным обзором official documentation, указав, как вы можете реализовать свой собственный контроллер MVC и свою собственную конечную точку авторизации.

+1

Для получения полной выборки вы также можете ознакомиться с [этой демонстрацией клиента/сервера Nancy] (https://github.com/aspnet-contrib/AspNet.Security.OpenIdConnect.Server/tree/dev/samples/ Нэнси). Он не использует 'OAuthAuthorizationServerMiddleware', а гораздо более развитую карту, нацеленную на OpenID Connect, но вы должны получить эту идею. – Pinpoint

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