Как конвертировать ASPNetIdentity в OpenIdConnect - PullRequest
0 голосов
/ 17 января 2019

У меня есть проект, который использует .NET Framework 4.6 AspNetIdentity, и я пытаюсь обновить его для использования OpenIdConnect. Кто-нибудь имел успех заменить ASPNetIdentity на OpenIdConnect с помощью .NET Framework 4.6?

Я изучил примеры и некоторые примеры быстрого запуска .NET core 2.0, такие как , эти , но они кажутся несовместимыми с тем, чего я пытаюсь достичь.

Я пытаюсь специально добавить что-то похожее на следующий фрагмент кода, взятый из одного из приведенных выше примеров:

services.AddAuthentication(options =>
{
    options.DefaultScheme = "Cookies";
    options.DefaultChallengeScheme = "oidc";
});
    .AddCookie("Cookies")
    .AddOpenIdConnect("oidc", options =>
    {
        options.SignInScheme = "Cookies";

        options.Authority = "http://xxx.xxx.xxx.xxx:5000";
        options.RequireHttpsMetadata = false;

        options.ClientId = "foo";
        options.ClientSecret = "secret";
        options.ResponseType = "code id_token";

        options.SaveTokens = true;
        options.GetClaimsFromUserInfoEndpoint = true;

        options.Scope.Add("api1");
        options.Scope.Add("offline_access");
    });

Мне нужно что-то похожее на это расширение AddAuthentication () параметра служб IServiceCollection в методе ConfigureServices () моего файла Startup.cs, чтобы позволить клиенту войти в систему через IdentityServer4.

Ответы [ 2 ]

0 голосов
/ 04 апреля 2019

Спасибо за ответы!Я бы сказал, что @Nan Yu, вероятно, получил ответ, который оказался ближе всего к решению, которое я придумал, но я решил, что поделюсь тем, что в итоге получилось, в методе Configure () моего файла Startup.cs..

using Microsoft.AspNetCore.Authentication.OpenIdConnect;
using Microsoft.IdentityModel.Protocols.OpenIdConnect;
...
var openidOptions = new OpenIdConnectOptions(authenticationScheme)
{
    ClientSecret = secret,
    AutomaticAuthenticate = true,
    SignInScheme = "Identity.External",
    Authority = identityServerAddress,
    ClientId = clientId,
    RequireHttpsMetadata = true,
    ResponseType = OpenIdConnectResponseType.CodeIdToken,
    AutomaticChallenge= true,
    GetClaimsFromUserInfoEndpoint = true,
    SaveTokens = true,
    Events = new OpenIdConnectEvents
    {
        OnRemoteSignOut = async remoteSignOutContext =>
        {
            remoteSignOutContext.HttpContext.Session.Clear();
        },
    },
};
openidOptions.Scope.Clear();
openidOptions.Scope.Add("openid");
app.UseOpenIdConnectAuthentication(openidOptions);

Добавление этого в мой клиент .NET Framework 4.6 в итоге позволило мне успешно общаться с моим .NET Core 2.0 Identity Server!Я ценю всех, кто пытался помочь :)

0 голосов
/ 18 января 2019

В платформе .net вы можете настроить OpenID Connect, используя библиотеку Microsoft.Owin.Security.OpenIdConnect в файле Startup.Auth.cs, что-то вроде:

public void ConfigureAuth(IAppBuilder app)
    {
        app.SetDefaultSignInAsAuthenticationType(CookieAuthenticationDefaults.AuthenticationType);

        app.UseCookieAuthentication(new CookieAuthenticationOptions());

        app.UseOpenIdConnectAuthentication(
            new OpenIdConnectAuthenticationOptions
            {
                ClientId = clientId,
                Authority = Authority,
                PostLogoutRedirectUri = redirectUri,
                RedirectUri = redirectUri,

                Notifications = new OpenIdConnectAuthenticationNotifications()
                {
                    //
                    // If there is a code in the OpenID Connect response, redeem it for an access token and refresh token, and store those away.
                    //
                    AuthenticationFailed = OnAuthenticationFailed
                }

            });
    }

    private Task OnAuthenticationFailed(AuthenticationFailedNotification<OpenIdConnectMessage, OpenIdConnectAuthenticationOptions> context)
    {
        context.HandleResponse();
        context.Response.Redirect("/Home/Error?message=" + context.Exception.Message);
        return Task.FromResult(0);
    }
...