设置适用于.NET Core Web API的OpenID Connect

时间:2018-09-26 10:02:06

标签: asp.net-core-webapi openid-connect

我有一个简单的应用程序,它使用Angular作为前端,并使用.NET Core Web API作为后端服务。现在,我要保护我的WEB API层。我可以为此目的使用OpenID Connect。但是所有在线示例或文档都使用某些身份管理系统来喜欢(Keycloak,Okta),但是我只想使用来自SQL数据库的用户数据。

类似,我从Angular中访问WEB API以获取基于发送的用户详细信息生成的令牌(使用OpenID?)。我只能使用令牌来授权用户。我想使用OpenID,以便以后可以使用其他身份管理系统。

我在WEB API中的启动类

services.AddAuthentication(options =>
            {
                options.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme;
                options.DefaultChallengeScheme = OpenIdConnectDefaults.AuthenticationScheme;

            })
            .AddCookie()
            .AddOpenIdConnect(o =>
            {
                o.ClientId = "sa";
                o.ClientSecret = "sa";
                o.Authority = "https://localhost:44352";
                o.GetClaimsFromUserInfoEndpoint = true;
                o.RequireHttpsMetadata = true;
            });

我添加了一个具有Authorize属性的控制器,并添加了一种测试方法,以查看当我从Swagger中命中该怎么办

我看到以下错误

IOException: IDX20804: Unable to retrieve document from: 'https://localhost:44352/.well-known/openid-configuration'

我不确定是什么错误。

我也想问一下我是否做对了。我可以使用相同的API(Authority吗?与(o.Authority =“ https://localhost:44352”;)中的身份一样)来认证/获取令牌。

2 个答案:

答案 0 :(得分:0)

OpenIDConnect所需的肯定是一台实现oidc-spec的服务器。 .well-known/... URL是oidc discovery spec的一部分,{identityserver和keycloak这样的服务器实现了。它提供了其他端点的标准化列表,用于检索令牌,获取用户信息,获取注销等。

您的API没有这样的终结点,所以这就是错误的意思。

如果您想自己实现整个oidc-spec,那就去做,但是我不建议这样做,这有点复杂。如我所见,.net核心仅实现了openidconnect-client,您可以自由选择服务器实现,只要它实现规范即可。

或者,看看JwtBearer,它是一种更轻量级的身份验证方法,更容易实现自己(并且最好的优点是:稍后可以轻松地更改为oidc)。好的出发点可能是these blogposts

答案 1 :(得分:0)

Async<int>