C# OAuth服务器令牌端点返回404
我正在研究SPA和web服务之间基于令牌的身份验证和授权。我在这个主题中找到了一些很棒的文章,这些文章都是由我开始构建我的基础设施的人撰写的 资源服务器和身份验证服务器是分开的。身份验证服务器有两个端点:C# OAuth服务器令牌端点返回404,c#,oauth-2.0,asp.net-web-api2,C#,Oauth 2.0,Asp.net Web Api2,我正在研究SPA和web服务之间基于令牌的身份验证和授权。我在这个主题中找到了一些很棒的文章,这些文章都是由我开始构建我的基础设施的人撰写的 资源服务器和身份验证服务器是分开的。身份验证服务器有两个端点: --我可以增加新的听众 --我可以生成令牌 第一个可以正常工作,所以我可以注册新的观众。我对第二个有意见。它总是返回404 public void ConfigureOAuth(IAppBuilder-appBuilder) { OAuthAuthorizationServerOption
- --我可以增加新的听众
- --我可以生成令牌
public void ConfigureOAuth(IAppBuilder-appBuilder)
{
OAuthAuthorizationServerOptions OAuthServerOptions=新的OAuthAuthorizationServerOptions()
{
//仅适用于开发环境
//待办事项
AllowInsecureHttp=true,
TokenEndpointPath=新路径字符串(“/services/oauth2/token”),
AccessTokenExpireTimeSpan=TimeSpan.FromMinutes(30),
Provider=新的CustomOAuthProvider(),
AccessTokenFormat=新的CustomJwtFormat(“http://dev.dilib.local")
};
使用OAuthAuthorizationServer(OAuthServerOptions);
}
正如你所看到的,这与泰瑟在他的文章中所写的几乎相同
到目前为止,我所做的工作是为了找出它不能按预期工作的原因:
- 我仔细检查了我编码的代码,没问题
- 我在谷歌上搜索了一下,有几个人遇到了这个问题,但答案只表明他们可以解决这个问题,没有人努力写下他/她做了什么
- 我更改了TokenEndpointPath几次,以避免它可能与我机器上运行的其他服务冲突,但是,我很抱歉,我的机器上没有任何其他服务
- 我读过OAuth端点并不完全是一个服务端点,我看到了一段代码片段,但整篇文章都是关于CORS的,我不想把所有内容都混在一起
- 我检查了IIS日志,除了特定帖子和404
- 我检查了事件查看器,什么都没有
- 我在这里检查了相关问题,但什么都没有
所以,我没心思了,我想我做了些傻事,我想请你帮忙 您提到oauth2令牌端点URI如下所示,但您的代码段没有这样说,因为您创建的“TokenEndpointPath”变量中的代码似乎缺少“authentication”字符串。我已将更正后的代码粘贴到下面。我不确定你的问题是否那么简单:) 身份验证/oauth2/token
哦,我在这里贴错代码了。你说得对,他们不匹配。然而,这不是问题所在。我还不知道是什么问题。当我开始处理这个问题时,我的机器晚上没有动过,令牌端点对最初的几个请求进行了响应,之后我又得到了404。我阅读了另一个由Taissen编写的教程,现在我有了一个工作令牌端点,但它没有与webapi服务器分离。我现在很高兴。稍后,我将花一点时间对其进行重构。正如您提到的“令牌端点对前几个请求进行了响应,之后我又得到了404”,我认为这种行为与“用户在给定的时间内发送了太多请求(“速率限制”)有关。在一定时间内,您可以发送的请求数量似乎有限制。然而,在这种情况下,服务器应该返回“429”http状态,而不是“404”。@SayusiAndo很高兴我的帖子很有用,但我想在Web API项目中默认情况下并没有应用速率限制,应该实现一些限制和速率限制的功能。
OAuthAuthorizationServerOptions OAuthServerOptions = new OAuthAuthorizationServerOptions()
{
//only dev environment
//TODO
AllowInsecureHttp = true,
TokenEndpointPath = new PathString("/services/authentication/oauth2/token"),
AccessTokenExpireTimeSpan = TimeSpan.FromMinutes(30),
Provider = new CustomOAuthProvider(),
AccessTokenFormat = new CustomJwtFormat("http://dev.dilib.local")
};