我使用yeoman上的最新模板创建了一个ASP.NET Core Angular应用程序。我正在运行IdentityServer4。在IdentityServer4中,我为MVC应用程序创建了一个客户端。
// OpenID Connect implicit flow client (MVC)
new Client
{
ClientId = "mvc",
ClientName = "MVC Client",
AllowedGrantTypes = GrantTypes.Implicit,
RedirectUris = { "http://localhost:5002/signin-oidc" },
PostLogoutRedirectUris = { "http://localhost:5002/signout-callback-oidc" },
AllowedScopes =
{
IdentityServerConstants.StandardScopes.OpenId,
IdentityServerConstants.StandardScopes.Profile
}
}
我使用以下文档来帮助解决此问题:http://docs.identityserver.io/en/release/quickstarts/3_interactive_login.html
我在Home控制器中添加了[Authorize]属性,一切似乎都正常。用户无法访问Angular代码,因为Home Controller会立即重定向到IdentityServer4进行登录。
我对混合流程与上面设置的内容有点混淆。 http://docs.identityserver.io/en/release/quickstarts/5_hybrid_and_api_access.html
因为我将使用ASP.NET Core Angular模板,它真的那么简单吗?只需将MVC应用程序添加为客户端,并将Authorize属性添加到HomeController的顶部?我想如果我可以利用ASP.NET Core,为什么要经历使用oidc-client在Angular中设置所有内容的所有麻烦。
我相信一旦用户角色参与(用户可以访问的内容),我的设置就会失败。我会依靠IdentityServer4告诉我这些角色,但我需要在Angular中访问它们。也许这就是我的问题的答案......这是混合工作流程的用途吗?
以下是我的应用的结构:
MyApp.Web
MyApp.Api(Angular将调用的Api,另外还有IdentityServer的IdentityController)
MyApp.Auth(身份服务器)
如果有人对我的问题完全感到困惑,那么如果我能够通过使用IdentityServer4和ASP.NET Core Angular应用程序设置身份验证/授权的好方法获得建议,将会非常有益。利用.NET Core方面的优势,我不必完全在客户端上完成所有的auth。
答案 0 :(得分:0)
利用.NET Core方面的优势,所以我不必完全在客户端上进行所有的验证 - 我认为你已经在正确的方向上了。您应该使用混合流程,这样您的令牌会更安全,因为客户端无法在浏览器上访问,您可以使用刷新令牌的强大功能来提高您的网络安全性。
无需在客户端上使用oidc-client库!如果您仍然被卡住,请告诉我,我可以发布一些代码。