Служба авторизации OAuth в ядре ASP.NET

В 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 Authentication может быть настроена через Middleware, но это касается части авторизации, в которой я выдаю претензии из моего API.

Ответ 1

Не тратьте время на поиск альтернативы 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, так и .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/.

Удачи!

Ответ 2

Для тех, кто все еще ищет исходный сервер авторизации 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