我尝试实施OAuth2身份验证和授权。我有一个授权服务器和一个资源服务器。客户端登录授权服务器(将用户名和密码发送给授权服务器),授权服务器返回access_token。客户端使用access_token来请求resource_server中带有[Authorize]标记的任何资源。
身份验证部分(将凭据发送到授权服务器并返回access_token)工作正常。我得到一个有效的JWT令牌。 问题是资源服务器无法识别access_token。每次客户端发送请求以获取具有[Authorize]标签的资源时,我都会得到:'401此未被授权的授权已被拒绝。
这是我尝试/验证的内容列表:
Authorization:JWT eyJ0eXAiO.......JuRpuf6yWg
我的实现基于这两个教程:
这是我的资源服务器中的Startup.cs类:
using Microsoft.Owin.Cors;
using Microsoft.Owin.Security;
using Microsoft.Owin.Security.DataHandler.Encoder;
using Microsoft.Owin.Security.Jwt;
using Microsoft.Owin.Security.OAuth;
using Owin;
using System.Threading.Tasks;
using System.Web.Http;
using Web.Api.App_Start;
namespace Web.Api
{
public class Startup
{
public void Configuration(IAppBuilder app)
{
HttpConfiguration config = new HttpConfiguration();
ConfigureOAuth(app);
app.UseAutofacMiddleware((newAutofacContainer())
.ConfigureContainer(config));
app.UseCors(CorsOptions.AllowAll);
WebApiConfig.Register(config);
app.UseWebApi(config);
}
public void ConfigureOAuth(IAppBuilder app)
{
var issuer = "http://localhost:81/Auth.Server";
var audience = "AUDIENCE";
var secret = TextEncodings.Base64Url.Decode("SECRET");
app.UseJwtBearerAuthentication(
new JwtBearerAuthenticationOptions
{
AuthenticationMode = AuthenticationMode.Active,
AllowedAudiences = new[] { audience },
IssuerSecurityTokenProviders = new
IIssuerSecurityTokenProvider[]
{
new SymmetricKeyIssuerSecurityTokenProvider(issuer,
secret)
},
Provider = new OAuthBearerAuthenticationProvider
{
OnValidateIdentity = context =>
{
context.Ticket.Identity.AddClaim(new
System.Security
.Claims.Claim("newCustomClaim", "newValue"));
return Task.FromResult<object>(null);
}
}
});
}
}
}
答案 0 :(得分:0)
[求助]:它应该是Authorization:Bearer eyJ0eXAiO.......JuRpuf6yWg
(持票人 NOT JWT!)