Служба авторизации OAuth в ASP.NET Core
В Web API 2 вы могли создавать конечную точку для выдачи токена, настраивая сервер авторизации OAuth через промежуточное ПО, как показано ниже:
//Set up our auth server options.
var OAuthServerOptions = new OAuthAuthorizationServerOptions()
{
AllowInsecureHttp = true,
TokenEndpointPath = new PathString("/token"),
AccessTokenExpireTimeSpan = TimeSpan.FromDays(1),
Provider = new SimpleAuthorizationServerProvider()
};
// Sets up the token issue endpoint using the options above
app.UseOAuthAuthorizationServer(OAuthServerOptions);
Возможно, мне не хватает этого, но я пытаюсь выяснить, как это сделать в ASP.NET Core. Я просмотрел источник ( https://github.com/aspnet/Security), но на самом деле я не вижу ничего похожего. Есть ли новый способ сделать это? Нужно ли просто создать контроллер и сделать это самому?
Я вижу, как аутентификация OAuth может быть настроена через Middleware, но это касается части авторизации, где я выдаю заявки из своего API.
2 ответа
Не тратьте свое время на поиски OAuthAuthorizationServerMiddleware
В ASP.NET Core команда ASP.NET просто решила не переносить ее: https://github.com/aspnet/Security/issues/83
Я предлагаю взглянуть на AspNet.Security.OpenIdConnect.Server, расширенный форк промежуточного программного обеспечения сервера авторизации OAuth2, который поставляется с Katana 3: есть версия OWIN/Katana 3 и версия ASP.NET Core, которая поддерживает обе версии.NET Framework и.NET Core.
https://github.com/aspnet-contrib/AspNet.Security.OpenIdConnect.Server
ASP.NET Core 1.x:
app.UseOpenIdConnectServer(options =>
{
options.AllowInsecureHttp = true;
options.TokenEndpointPath = new PathString("/token");
options.AccessTokenLifetime = TimeSpan.FromDays(1);
options.TokenEndpointPath = "/token";
options.Provider = new SimpleAuthorizationServerProvider();
});
ASP.NET Core 2.x:
services.AddAuthentication().AddOpenIdConnectServer(options =>
{
options.AllowInsecureHttp = true;
options.TokenEndpointPath = new PathString("/token");
options.AccessTokenLifetime = TimeSpan.FromDays(1);
options.TokenEndpointPath = "/token";
options.Provider = new SimpleAuthorizationServerProvider();
});
Чтобы узнать больше об этом проекте, я бы рекомендовал прочесть http://kevinchalet.com/2016/07/13/creating-your-own-openid-connect-server-with-asos-introduction/.
Удачи!
Для тех, кто все еще ищет оригинальный сервер авторизации OAuth в ASP.NET 5, я перенес код и оригинальный пример здесь: https://github.com/XacronDevelopment/oauth-aspnet
Порт имеет обратную совместимость, что позволяет серверам ресурсов ASP.NET 4.x считывать маркеры доступа, созданные сервером авторизации.
Пакеты Nuget находятся здесь: https://www.nuget.org/packages/OAuth.AspNet.AuthServer https://www.nuget.org/packages/OAuth.AspNet.Tokens https://www.nuget.org/packages/OAuth.Owin.Tokens