需要通过JWT Bearer确保在docker中授权.net Core web api
在我的Startup.cs中:
...
public void ConfigureServices(IServiceCollection services) {
var pem = File.ReadAllText("publickey.pem");
byte[] bytes = Encoding.ASCII.GetBytes(pem);
services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddJwtBearer(options => {
options.TokenValidationParameters = new TokenValidationParameters {
ValidateLifetime = true,
ValidateIssuerSigningKey = true,
IssuerSigningKey = new SymmetricSecurityKey(bytes)
};
});
services.AddMvc();
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env) {
if (env.IsDevelopment()) {
app.UseDeveloperExceptionPage();
}
app.UseAuthentication();
app.UseMvc();
}
...
我的publickey.pem看起来像这样:
-----BEGIN PUBLIC KEY-----
JBkjgkVBJKlgkljvk.jgk;4jkgJLBjkgJHcvbnVBcCghfb+dfdFdf5fdf54ASfG5
Sov1MTHDHZHORsZgWQKTbmfv/BjsgdfbvKJGuklVhjklTuiltgjkgtJKLgJKLTUG
diGauBf4HfFZP/iJZq43cuPXKXRRhX8Xp/3FGZ1HL4FRiXdAnoPuY/ofBclXEIUM
XWpJcBdN4pUiV2sCFDDMx6+KDl69orsfIwHnX3trjIeSJX7RWJyBOI8A1PJmeYFJ
T9Paq5qFdxxF6udNoxhZN5kTTmCqZTLesQf3mk1HLj759ZS8E1NlxoXWS3h8D3jd
SHesaEltPlrdA/y3rRa84OrwyryLp9kh8IOYXIifXPyeP1RWP2bGDkBcHiSyzgr/
cwIDAQAB
-----END PUBLIC KEY-----
而我的控制器:
[Route("check")]
public class CheckController : ReqController {
[HttpGet, Authorize]
public Response Task() {
try {
token = Request.Headers["Authorization"];
DB.Check();
} catch (Exception e) {
response.Status = e.Message;
}
return response;
}
}
通过Postman呼叫我的api:我选择了 GET
方法 . 在 Authorization
选项卡上选择 Bearer Token
并插入我的令牌
在响应标头中发送请求后,我收到:
Content-Length →0
Date →Wed, 06 Jun 2018 08:01:02 GMT
Server →Kestrel
WWW-Authenticate →Bearer error="invalid_token", error_description="The signature is invalid"
在现场https://jwt.io/我也用我的公钥检查我的令牌(RSASHA256),并显示我 Signature Verified
在哪里我可以犯错误或者我可能错过的东西?