我是OpenID和OAuth 2.0的新手。
我有自己的API(不是在.net核心中,而是在.net 4.6中),并且我试图通过发送带有访问令牌的请求来使用 Postman 我自己的API应用程序中的 [Authorize] 资源。
该api配置为在隐式模式下调用OpenID服务器,因此我可以获取 access_token 并从其他客户端使用它。
调试应用程序时,我没有任何问题。它针对OAUTH服务器进行身份验证并保存状态,但是由于某些原因,当我尝试向我的API资源发送请求时,它仍将我重定向到OAUTH服务器的“身份验证”页面,就像我没有登录一样
这是我的API中的启动程序
public void ConfigureAuth(IAppBuilder app)
{
app.SetDefaultSignInAsAuthenticationType(CookieAuthenticationDefaults.AuthenticationType);
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
AuthenticationType = "Cookies",
CookieName = "AuthCookieCoolApp",
});
app.UseOpenIdConnectAuthentication(new OpenIdConnectAuthenticationOptions
{
Authority = OidcAuthority,
ClientId = OidcClientId,
//ClientSecret = OidcClientSecret,
GetClaimsFromUserInfoEndpoint = true,
PostLogoutRedirectUri = OidcRedirectUrl,
RedirectUri = OidcRedirectUrl,
// ResponseType = OpenIdConnectResponseType.Code,
Scope = OpenIdConnectScope.OpenId,
RequireHttpsMetadata = false,
ResponseType = OpenIdConnectResponseType.CodeIdTokenToken,
Notifications = new OpenIdConnectAuthenticationNotifications
{
MessageReceived = notification =>
{
var message = notification.ProtocolMessage;
var accesstoken = message.AccessToken;
return Task.FromResult(0);
}
}
});
}
也许与Cookie有关,但是我不确定。
事实是,当我调试asp.net应用程序时,此方法工作正常:仅在OAuth服务器中进行身份验证时,才允许标有[Authorize]属性的端点。但是由于某些原因,我无法在Postman中使用它:
首先,我发送此请求以获取一个access_token:
然后,我尝试在调用API的[Autorize]方法的其他请求中使用获得的相同访问令牌,但是它将我重定向到OAuth服务器的登录页面:
我可能在API中设置了错误,不确定是什么。
有人经历过类似的事情吗?
答案 0 :(得分:2)
标题authorize
看起来可疑。通常Authorization
标头用于身份验证。但是您可能具有自定义实现,其中authorize
标头有效。