我使用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,
我向主控制器添加了 [Authorize] 属性,一切似乎都正常工作。用户无法访问 Angular 代码,因为主控制器会立即重定向到 IdentityServer4 进行登录。
我对上面设置的混合流有点困惑。 http://docs.identityserver.io/en/release/quickstarts/5_hybrid_and_api_access.html
由于我将使用 ASP.NET 核心角度模板,它真的那么简单吗?只需将 MVC 应用程序添加为客户端,并将授权属性添加到 HomeController 的顶部?我想如果我可以利用 Core,为什么要经历使用 oidc-client 在 Angular 中设置所有内容的麻烦 ASP.NET。
我相信一旦涉及用户角色(哪个用户可以访问什么),我的设置就会失败。我会依靠 IdentityServer4 来告诉我这些角色,但我需要在 Angular 中访问它们。也许这就是我问题的答案...这就是混合工作流的用途吗?
以下是我的应用程序的结构
:MyApp.Web
MyApp.Api(Angular 将调用的 Api,此外还有一个用于 IdentityServer 的 IdentityController )MyApp.Auth (Identity Server)
如果有人对我的问题感到完全困惑,如果我能得到一个关于使用 IdentityServer4 和 ASP.NET Core Angular 应用程序设置身份验证/授权的好方法的建议,那将是非常有益的。 利用 .NET Core 方面的东西,这样我就不必纯粹在客户端上做所有的身份验证。
利用 .NET Core 方面的优势,这样我就不必纯粹在客户端上执行所有身份验证- 我认为您已经走在正确的方向上。应使用混合流,这样令牌将更安全,因为客户端无法在浏览器上访问,并且可以使用刷新令牌的强大功能使 Web API 更安全。
无需在客户端上使用 oidc 客户端库!如果您仍然卡住,请告诉我,我可以发布一些代码。