首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WebAPI2:微服务体系结构中的授权代码流

WebAPI2:微服务体系结构中的授权代码流
EN

Stack Overflow用户
提问于 2020-05-16 05:09:50
回答 1查看 573关注 0票数 0

身份提供者: Keycloak-9.0.0 .net版本: 4.5.2

基本上,我正在尝试集成c# webapi服务,如下所示。

授权码流

我已经为C#使用了Keycloak连接器(C#),它被设计为一个自带的身份验证中间件组件。

用钥匙斗篷样本我得到了错误。但是,我不确定该调用是否被转发到keycloak进行验证,而是得到了一个错误。

  1. 如果未启用"signature-validation-failed-unable-to-match-kid“模式,则将获得WebAPI
  2. 如果启用webAPI模式,我将得到401 ({“消息”:“此请求的授权已被拒绝”)。}未经授权的访问:需要有效的承载令牌授权头。

启动类

代码语言:javascript
复制
public void Configuration(IAppBuilder app)
        {

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



            app.UseKeycloakAuthentication(new KeycloakAuthenticationOptions
            {
                Realm = "test_keycloak",
                ClientId = "test",
                ClientSecret = "9f25fd55-851f-4eed-9fb9-24a0a0e4ff11",

                KeycloakUrl = "http://localhost:8080/auth",
                AuthenticationType = "Bearer",
                SignInAsAuthenticationType = "Bearer",

                AllowUnsignedTokens = false,
                DisableIssuerSigningKeyValidation = false,
                DisableIssuerValidation = false,
                UseRemoteTokenValidation = true,
                EnableWebApiMode = true,
                DisableAudienceValidation = false,
                Scope= "openid",

            });
}

我没看到钥匙斗篷上有任何记录。会有什么问题吗?如何调试?

由于它是一个标准的Oauth2流,我是否能够使用Microsoft.Owin.Security.OpenIdConnect进行令牌验证?

例如,在java spring中,安全性具有相同的简单配置(使用jwt -url)。

需要你的投入!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-08-12 17:27:17

我也可以用microsoft.owin.security.jwt来解决问题。这是密码。

注意:还没有进行异常处理。只是基本代码。

代码语言:javascript
复制
public void Configuration(IAppBuilder app) {
        HttpClient htpp = new HttpClient();
        var keysResponse = htpp.GetAsync("https://<FQDN of keycloak>/auth/realms/<realm>/protocol/openid-connect/certs").Result;
        
        var rawKeys = keysResponse.Content.ReadAsStringAsync().Result;
        

        Microsoft.IdentityModel.Tokens.JsonWebKeySet jsonWebKeySet = JsonConvert.DeserializeObject<Microsoft.IdentityModel.Tokens.JsonWebKeySet>(rawKeys);

        app.UseJwtBearerAuthentication(
        new JwtBearerAuthenticationOptions {
            AuthenticationType = DefaultAuthenticationTypes.ExternalBearer,
            AuthenticationMode = AuthenticationMode.Active,
            Realm = <realm>",
            
            TokenValidationParameters = new TokenValidationParameters() {
                
                AuthenticationType = "Bearer",
                ValidateIssuer = true,
                ValidateIssuerSigningKey = true,
                ValidAudiences = new string[] { <clientID> },
                ValidIssuer = "<FQDN of keycloak>/auth/realms/<realm>",
                ValidateLifetime = true,
                ValidateAudience = true,
                IssuerSigningKeys = jsonWebKeySet.GetSigningKeys(),
                
            }
        });
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61832165

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档