我有一个使用OWIN中间件的应用程序用于OpenIdConnect.startup.cs文件使用app.UseOpenIdConnectAuthentication的标准实现.cookie被设置为浏览器,但它出错:
IDX10311:RequireNonce为'true'(默认值),但validationContext.Nonce为null.nonce无法验证.如果您不需要检查nonce,请将OpenIdConnectProtocolValidator.RequireNonce设置为"false".
我发现当像大多数调试项目一样运行fiddler时,会发生这种情况.返回错误,但如果我返回该站点,一切正常,我的用户已通过身份验证.有没有人在运行提琴手时看到这种行为?
随着提琴手:
没有提琴手跑:
想法?我可以在不运行fiddler的情况下绕过它,但是在调试时,运行fiddler来检查流量也会很不错.
我正在尝试使用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) 所以我有一个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服务客户端来说,它绝对不友好.
这是预期的行为,如果不是,我需要做些什么来获得更合适的回应?
我使用IdentityServer3来保护具有客户端凭据授权的Web API.对于文档我使用Swashbuckle但无法弄清楚如何在SwaggerConfig中为客户端凭据(应用程序)流启用Oauth2.任何帮助,将不胜感激!
我正在尝试针对at_hash验证访问令牌.令牌标题是这样的
{
"typ": "JWT",
"alg": "RS256",
"x5t": "MclQ7Vmu-1e5_rvdSfBShLe82eY",
"kid": "MclQ7Vmu-1e5_rvdSfBShLe82eY"
}
如何从访问令牌获取id标记中的Base64编码的at_hash声明值?是否有可以帮助我的在线工具?SHA256哈希计算器不是一个正确的工具吗?
谢谢
在同一IIS服务器上使用互连的ASP.NET WebApis时,我们遇到了一些死锁.我们想知道这是否是某种预期的行为,因为在同一服务器和相同的应用程序池上托管所有API,因为我们已经设法通过将WebApi移动到另一个池来避免这个问题; 或者如果我们的代码有问题.
对于生产,我们可能会在不同的服务器或池上托管API,但我们仍然想了解为什么会发生这种情况.我们主要担心的是,如果这是我们的错误代码,即使主机设置正确,问题也可以在更大范围内重现.
我们已经创建了一个小解决方案来重现在GitHub中托管的死锁.
复制步骤如下:
预期的行为是最终解决所有请求.
实际行为是,某些请求完成,而其他一些请求将失败,因为TaskCancelledException这似乎是由于请求超时.
我能找到的唯一一篇文章似乎提到同一个问题是从2014年开始:" 不要向同一台服务器发送ServerXMLHTTP或WinHTTP请求 ",我相信这是我们遇到的问题,我们怎样才能确认这一点?
上下文
我们被分配了为我们所在公司的多个内部API创建集中式身份验证服务器的任务.我们使用带有引用标记的IdentityServer3,因此当某些API使用引用标记请求第二个API时,第二个API将请求验证服务器进行标记验证,以再现该问题.
我添加了IdentityServer标记,因为在进行多个API通信和使用引用标记时,这可能是一个常见问题.GitHub上的示例.
我有一个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?
当我看到身份服务器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
我们有一个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) 我们正在尝试以正确的方式设置Identity Server 3.我们认证工作正常,我们设法检索刷新令牌.
客户端应用程序正在使用Angular.
现在当acces_token到期时,对其余api的任何调用都失败了(我们设法让它返回401),但我们想知道如何重新验证用户.
在我们的测试中,任何通过Javascript调用的api调用都失败了(401)但是一旦刷新页面,整个机制就开始了.我们确实看到我们被重定向到身份服务器但它没有显示登录页面,我们显然已经用新的令牌发回客户端应用程序.
我想要做的是刷新访问令牌,而不必强迫用户刷新页面.
我不确定的是谁的责任呢?那是客户端应用程序(网站)还是有角度的应用程序?换句话说,如果应用程序透明地处理Angular,或者当它收到401时应该有角度做某事,在这种情况下,我不太确定信息将如何流回Web应用程序.
任何线索?
附加信息:我们正在使用OpenId Connect
我正在编写ASP.Net核心Web应用程序并使用UseOpenIdConnectAuthentication它将其连接到IdentityServer3.模拟他们的ASP.Net MVC 5样本我正在尝试转换从Identity Server收到的声明,以删除" 当然不需要的低级协议声明 ".在MVC 5中,他们为SecurityTokenValidated Notification添加了一个处理程序,该处理程序AuthenticationTicket仅使用所需的声明来交换一个.
在ASP.Net Core中,为了做同等的事情,我认为我需要处理OnTokenValidated中OpenIdConnectEvents.但是,在该阶段,似乎没有检索到附加范围信息.如果我处理OnUserInformationReceived,则存在额外信息,但存储在用户而不是主体上.
在身份验证完成后,其他事件似乎都不是永久删除我不想保留的声明的明显位置.任何建议都感激不尽!