Я настроил проект сервера идентификации со следующим кодом: Это мой файл 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();
}
Я хочу знать, почему при вызове моего веб-клиента он не перенаправляется на сервер идентификациистраница входа?.
Любая помощь или предложения, чтобы определить основную причину или я что-то упустил?.
Заранее спасибо!