标签: identityserver3

OWIN OpenIdConnect中间件IDX10311随机数无法验证

我有一个使用OWIN中间件的应用程序用于OpenIdConnect.startup.cs文件使用app.UseOpenIdConnectAuthentication的标准实现.cookie被设置为浏览器,但它出错:

IDX10311:RequireNonce为'true'(默认值),但validationContext.Nonce为null.nonce无法验证.如果您不需要检查nonce,请将OpenIdConnectProtocolValidator.RequireNonce设置为"false".

我发现当像大多数调试项目一样运行fiddler时,会发生这种情况.返回错误,但如果我返回该站点,一切正常,我的用户已通过身份验证.有没有人在运行提琴手时看到这种行为?

随着提琴手:

  • OpenIdConnect中的SecurityTokenValidated通知执行两次.
  • 第二次通过IDX10311后抛出错误
  • 浏览器包含有效的cookie,返回页面我可以查看有效的User.Identity数据.

没有提琴手跑:

  • SecurityTokenValidated在OpenIdConnect中执行一次
  • 没有抛出错误,继续加载控制器操作以进行后验证重定向Uri
  • Cookie也有效且User.Identity数据正确.

想法?我可以在不运行fiddler的情况下绕过它,但是在调试时,运行fiddler来检查流量也会很不错.

c# fiddler owin openid-connect identityserver3

15
推荐指数
4
解决办法
2万
查看次数

始终返回IdentityServer"invalid_client"错误

我正在尝试使用IdentityServer3,但不知道为什么我总是得到"invalid_client"错误,总是无论我做什么.

这是我正在使用的代码:

//Startup.cs (Auth c# project)
public void Configuration(IAppBuilder app) {
    var inMemoryManager = new InMemoryManager();
    var factory = new IdentityServerServiceFactory()
        .UseInMemoryClients(inMemoryManager.GetClients())
        .UseInMemoryScopes(inMemoryManager.GetScopes())
        .UseInMemoryUsers(inMemoryManager.GetUsers());

    var options = new IdentityServerOptions {
        Factory = factory,
        RequireSsl = false
    };

    app.UseIdentityServer(options);
}
Run Code Online (Sandbox Code Playgroud)

InMemoryManager帮助器.

//InMemoryManager.cs
public class InMemoryManager {
    public List<InMemoryUser> GetUsers() {
        return new List<InMemoryUser> {
            new InMemoryUser {
                Username = "alice",
                Password = "password",
                Subject = "2",
                Claims = new [] {
                    new Claim("User name", "Alice")
                }
            }
        };
    }

    public IEnumerable<Scope> …
Run Code Online (Sandbox Code Playgroud)

c# oauth-2.0 postman openid-connect identityserver3

14
推荐指数
3
解决办法
7931
查看次数

MVC6应用中的OAuth令牌过期

所以我有一个MVC6应用程序,其中包括一个身份服务器(使用ThinkTecture的IdentityServer3)和一个MVC6 Web服务应用程序.

在Web服务应用程序中,我在启动时使用此代码:

app.UseOAuthBearerAuthentication(options =>
{
    options.Authority = "http://localhost:6418/identity";
    options.AutomaticAuthentication = true;
    options.Audience = "http://localhost:6418/identity/resources";
});
Run Code Online (Sandbox Code Playgroud)

然后我有一个控制器,其动作具有该Authorize属性.

我有一个JavaScript应用程序,它使用身份服务器进行身份验证,然后使用提供的JWT令牌来访问Web服务操作.

这有效,我只能使用有效令牌访问该操作.

当JWT到期时问题就出现了.我得到的似乎是一个详细的ASP.NET 500错误页面,它返回以下异常的异常信息:

System.IdentityModel.Tokens.SecurityTokenExpiredException IDX10223:生命周期验证失败.令牌已过期.

我对OAuth很新,并且通常保护Web API,所以我可能会偏离基础,但对于过期令牌而言,500错误对我来说似乎不合适.对于Web服务客户端来说,它绝对不友好.

这是预期的行为,如果不是,我需要做些什么来获得更合适的回应?

oauth-2.0 jwt identityserver3 asp.net-core

13
推荐指数
1
解决办法
2305
查看次数

在Swashbuckle中启用Oauth2客户端凭据流

我使用IdentityServer3来保护具有客户端凭据授权的Web API.对于文档我使用Swashbuckle但无法弄清楚如何在SwaggerConfig中为客户端凭据(应用程序)流启用Oauth2.任何帮助,将不胜感激!

oauth-2.0 swashbuckle identityserver3

12
推荐指数
2
解决办法
9738
查看次数

使用at_hash验证访问令牌

我正在尝试针对at_hash验证访问令牌.令牌标题是这样的

{ "typ": "JWT", "alg": "RS256", "x5t": "MclQ7Vmu-1e5_rvdSfBShLe82eY", "kid": "MclQ7Vmu-1e5_rvdSfBShLe82eY" }

如何从访问令牌获取id标记中的Base64编码的at_hash声明值?是否有可以帮助我的在线工具?SHA256哈希计算器不是一个正确的工具吗?

谢谢

rsa identityserver3 oauth2

12
推荐指数
1
解决办法
1836
查看次数

IIS ASP.NET WebApi请求同一服务器时出现死锁

在同一IIS服务器上使用互连的ASP.NET WebApis时,我们遇到了一些死锁.我们想知道这是否是某种预期的行为,因为在同一服务器和相同的应用程序池上托管所有API,因为我们已经设法通过将WebApi移动到另一个池来避免这个问题; 或者如果我们的代码有问题.

对于生产,我们可能会在不同的服务器或池上托管API,但我们仍然想了解为什么会发生这种情况.我们主要担心的是,如果这是我们的错误代码,即使主机设置正确,问题也可以在更大范围内重现.

我们已经创建了一个小解决方案来重现在GitHub中托管的死锁.

复制步骤如下:

  1. WebClient在并行WebApi1中执行多个HTTP请求.
  2. WebApi1对WebApi2执行HTTP请求.
  3. WebApi2对WebApi3执行HTTP请求.
  4. WebApi3只返回一个字符串.

预期的行为是最终解决所有请求.

实际行为是,某些请求完成,而其他一些请求将失败,因为TaskCancelledException这似乎是由于请求超时.

我能找到的唯一一篇文章似乎提到同一个问题是从2014年开始:" 不要向同一台服务器发送ServerXMLHTTP或WinHTTP请求 ",我相信这是我们遇到的问题,我们怎样才能确认这一点?

上下文

我们被分配了为我们所在公司的多个内部API创建集中式身份验证服务器的任务.我们使用带有引用标记的IdentityServer3,因此当某些API使用引用标记请求第二个API时,第二个API将请求验证服务器进行标记验证,以再现该问题.

我添加了IdentityServer标记,因为在进行多个API通信和使用引用标记时,这可能是一个常见问题.GitHub上的示例.

asp.net iis deadlock asp.net-web-api2 identityserver3

12
推荐指数
1
解决办法
1033
查看次数

带有身份服务器的asp.net Web表单客户端4

我有一个asp.net解决方案,包括

1). asp.net identity server rc 3
2). asp.net Core web api
3). asp.net webform ( not in asp.net core, client)
Run Code Online (Sandbox Code Playgroud)

我没有看到任何带有身份服务器4和Web表单客户端的示例.您能否建议如何使用具有asp.net标识的身份服务器对Web表单用户进行身份验证,然后使用访问令牌调用api?

我没有看到带有Web表单客户端示例的身份服务器4 示例

身份服务器3有一个示例, 但它在启动时正在做所有事情

当我看到身份服务器4的mvc客户端时,它在configure方法中有所有设置,然后像这样调用它

我将如何在webform中应用Authorize属性,以便将我重定向到身份服务器4进行登录,然后在登录后我调用api,如下所示:

如何更改webform的客户端?

 new Client()
                  {
                    ClientId = "mvcClient",
                    ClientName = "MVC Client",                    
                    AllowedGrantTypes = GrantTypes.HybridAndClientCredentials,

                    ClientSecrets = new List<Secret>()
                    {
                        new Secret("secret".Sha256())
                    },

                    RequireConsent = false;

                    // where to redirect to after login
                    RedirectUris = { "http://localhost:5002/signin-oidc" },
                    // where to redirect …
Run Code Online (Sandbox Code Playgroud)

webforms asp.net-identity identityserver3 asp.net-core identityserver4

12
推荐指数
1
解决办法
1267
查看次数

IdentityServer3 - 因无效的CORS路径而被拒绝

我们有一个ASP.NET MVC应用程序,在没有针对IdentityServer3的问题的情况下进行身份验证,但是如果用户在大约3分钟后继续使用AJAX功能之前等待使用ApiController的应用程序的Web API部分开始失败(3分钟之前一切似乎都很好) .

Chrome中出现的错误包括:

XMLHttpRequest无法加载 https://test-auth.myauthapp.com/auth/connect/authorize?client_id=ecan-farmda ... gwLTk5ZjMtN2QxZjUyMjgxNGE4MDg2NjFhZTAtOTEzNi00MDE3LTkzNGQtNTc5ODAzZTE1Mzgw.请求的资源上不存在"Access-Control-Allow-Origin"标头.因此,不允许来源" http://test.myapp.com "访问.

在IE上我收到以下错误:

SCRIPT7002:XMLHttpRequest:网络错误0x4c7,操作被用户取消.

看看IdentityServer3的日志,我看到的条目如下:

2015-08-10 16:42 [警告](Thinktecture.IdentityServer.Core.Configuration.Hosting.CorsPolicyProvider)对路径的CORS请求:/ connect/authorize from origin:http://test.myapp.com 但拒绝因为无效CORS路径

在IdentityServer3 Web应用程序中,我向客户提供AllowedCorsOrigins:

Thinktecture.IdentityServer.Core.Models.Client client = new Thinktecture.IdentityServer.Core.Models.Client()
{
    Enabled = configClient.Enabled,
    ClientId = configClient.Id,
    ClientName = configClient.Name,
    RedirectUris = new List<string>(),
    PostLogoutRedirectUris = new List<string>(),
    AllowedCorsOrigins = new List<string>(),
    RequireConsent = false, // Don't show consents screen to user
    RefreshTokenExpiration = Thinktecture.IdentityServer.Core.Models.TokenExpiration.Sliding
};

foreach (Configuration.RegisteredUri uri in configClient.RedirectUris)
{
    client.RedirectUris.Add(uri.Uri);
}

foreach (Configuration.RegisteredUri uri in configClient.PostLogoutRedirectUris)
{ …
Run Code Online (Sandbox Code Playgroud)

c# ajax cors asp.net-apicontroller identityserver3

11
推荐指数
1
解决办法
4215
查看次数

IdentityServer 3使用刷新令牌刷新用户

我们正在尝试以正确的方式设置Identity Server 3.我们认证工作正常,我们设法检索刷新令牌.

客户端应用程序正在使用Angular.

现在当acces_token到期时,对其余api的任何调用都失败了(我们设法让它返回401),但我们想知道如何重新验证用户.

在我们的测试中,任何通过Javascript调用的api调用都失败了(401)但是一旦刷新页面,整个机制就开始了.我们确实看到我们被重定向到身份服务器但它没有显示登录页面,我们显然已经用新的令牌发回客户端应用程序.

我想要做的是刷新访问令牌,而不必强迫用户刷新页面.

我不确定的是谁的责任呢?那是客户端应用程序(网站)还是有角度的应用程序?换句话说,如果应用程序透明地处理Angular,或者当它收到401时应该有角度做某事,在这种情况下,我不太确定信息将如何流回Web应用程序.

任何线索?

附加信息:我们正在使用OpenId Connect

asp.net angularjs identityserver3

11
推荐指数
1
解决办法
7909
查看次数

在ASP.Net Core中转换Open Id Connect声明

我正在编写ASP.Net核心Web应用程序并使用UseOpenIdConnectAuthentication它将其连接到IdentityServer3.模拟他们的ASP.Net MVC 5样本我正在尝试转换从Identity Server收到的声明,以删除" 当然不需要的低级协议声明 ".在MVC 5中,他们为SecurityTokenValidated Notification添加了一个处理程序,该处理程序AuthenticationTicket仅使用所需的声明来交换一个.

在ASP.Net Core中,为了做同等的事情,我认为我需要处理OnTokenValidatedOpenIdConnectEvents.但是,在该阶段,似乎没有检索到附加范围信息.如果我处理OnUserInformationReceived,则存在额外信息,但存储在用户而不是主体上.

在身份验证完成后,其他事件似乎都不是永久删除我不想保留的声明的明显位置.任何建议都感激不尽!

claims-based-identity identityserver3 asp.net-core

11
推荐指数
4
解决办法
6092
查看次数