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