identityserver3 не удается с веб-клиентом - PullRequest
0 голосов
/ 26 сентября 2019

Я настроил проект сервера идентификации со следующим кодом: Это мой файл Startup.cs:

public void ConfigureAuth(IAppBuilder app)
    {
        // Configure Identity Server
        // at the identity uri, you are going to find the identity server
        app.Map("/identity", idsrvApp =>
        {
            idsrvApp.UseIdentityServer(new IdentityServerOptions
            {
                SiteName = "Embedded identity server",
                IssuerUri = "https://identitysrv3/embedded", // in real scenarios  make sure this is unique. to uniquely identify users

                Factory = new IdentityServerServiceFactory()
                .UseInMemoryClients(Clients.Get())
                .UseInMemoryScopes(Scopes.Get())
                .UseInMemoryUsers(User.Get()),

                // this is not for SSL, that will be provided by IIS or Azure where we deploy. This is to sign the tokens
                SigningCertificate = LoadCertificate()
            });
        });        

        X509Certificate2 LoadCertificate()
        {
            return new X509Certificate2(
        string.Format(@"{0}\bin\identityServer\idsrv3test.pfx", AppDomain.CurrentDomain.BaseDirectory), "idsrv3test");
        }

Это мой файл Client.cs:

public static IEnumerable<Client> Get()
    {
        return new[]
        {
            new Client
            {
                Enabled = true,
                ClientName = "Identity Server Web Access",
                ClientId = "mvc",
                Flow = Flows.Hybrid,
                //RequireConsent = true,

                RedirectUris=new List<string>
                {
                    "https://localhost:44344/"
                },
                AllowedScopes = new List<string>
                {
                    "openid",
                    "profile",                        
                }
            }
        };
    }

Это мой файл Scope.cs:

public static IEnumerable<Scope> Get()
    {
        var scopes = new List<Scope>
        {
            // identity scope. This is the intent

            StandardScopes.OpenId,
            StandardScopes.Profile
        };

        return scopes;
    }

, и это мой класс User:

public static class User
{
    public static List<InMemoryUser> Get()
    {
        return new List<InMemoryUser>()
        {
            new InMemoryUser
            {
                Username = "Sidd",
                Password = "secret",
                Subject = "1",

                Claims = new[]
                {
                    new Claim(Constants.ClaimTypes.GivenName, "Sidd"),
                    new Claim(Constants.ClaimTypes.FamilyName, "Mehta"),
                }
            },
            new InMemoryUser
            {
                Username = "Humpty",
                Password = "secret",
                Subject = "3",

                Claims = new[]
                {
                    new Claim(Constants.ClaimTypes.GivenName, "Humpty"),
                    new Claim(Constants.ClaimTypes.FamilyName, "Sharma"),
                }
            },
            new InMemoryUser
            {
                Username = "Virat",
                Password = "secret",
                Subject = "4",

                Claims = new[]
                {
                    new Claim(Constants.ClaimTypes.GivenName, "Virat"),
                    new Claim(Constants.ClaimTypes.FamilyName, "Kohli"),
                }
            }
        };
    }
}

Я создал один проект веб-клиента, который содержит логику openid connect, а также имеет Авторизациюатрибут на уровне контроллера.Сначала я запускаю код Identity Server на уровне IIS Express, а после его запуска запускаю свой веб-клиент.Поскольку при запуске в веб-клиенте мой полный домашний контроллер отмечен атрибутом Authorize, он должен попасть на сервер идентификации и отобразить страницу входа.Но этого не происходит, и я просто получаю 401.0 Несанкционированная ошибка.

Ниже приведен мой код веб-клиента.Файл Startup.cs:

public void Configuration(IAppBuilder app)
    {
        // For more information on how to configure your application, visit https://go.microsoft.com/fwlink/?LinkID=316888

        app.UseCookieAuthentication(new CookieAuthenticationOptions
        {
            AuthenticationType = "Cookies"
        });

        app.UseOpenIdConnectAuthentication(new OpenIdConnectAuthenticationOptions
        {
            Authority = "https://localhost:44329/identity",
            ClientId = "mvc",
            RedirectUri = "https://localhost:44344/",
            ResponseType = "code id_token",
            Scope = "openid",

            SignInAsAuthenticationType = "Cookies",
            Notifications = new OpenIdConnectAuthenticationNotifications()
            {

                MessageReceived = async n =>
                {
                    EndpointAndTokenHelper.DecodeAndWrite(n.ProtocolMessage.IdToken);
                }

            }
        });
    }

и это мой домашний контроллер:

[Authorize]
public class HomeController : Controller
{
    public ActionResult Index()
    {
        return View();
    }

Я хочу знать, почему при вызове моего веб-клиента он не перенаправляется на сервер идентификациистраница входа?.

Любая помощь или предложения, чтобы определить основную причину или я что-то упустил?.

Заранее спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...