新建API的项目web
dotnet new webapi --name ClientCredentialApiapi
在咱们上一节课的代码IdentityServerSample中加入受权的认证post
引入命名空间:ui
using Microsoft.AspNetCore.Authorization;spa
而后给Controller加上authrize的属性。这样API就访问不了。3d
给咱们刚建立的项目:ClientCredentialApicode
加上Authrize属性,这样这个API咱们就访问不了。blog
nuget包添加引用token
IdentityServer4.AccessTokenValidationci
在Startup.cs里面把认证受权加进来
services.AddAuthentication("Bearer") .AddIdentityServerAuthentication(options => { options.Authority = "http://localhost:5000";//须要受权的时候找谁 options.RequireHttpsMetadata = false; options.ApiName = "api"; });
使用Authentication
这样就完成了。有了IdentityServer在APi端加受权就很是的简单
换成501的端口
而后不用Https:
http://localhost:5001/api/values
返回的状体是401,未受权
那咱们去哪里拿Token呢?
运行起来Server端 的地址。
打开地址:
http://localhost:5000/.well-known/openid-configuration
这里告诉咱们取token的地址
"token_endpoint": "http://localhost:5000/connect/token",
postman内请求这个地址:
http://localhost:5000/connect/token
body内三个参数:
client_id:client
client_secret:secret
grant_type:client_credentials
返回的数据。这样就拿到了咱们的token
{ "access_token": "eyJhbGciOiJSUzI1NiIsImtpZCI6ImE3MGZkOGQyYjVjMmVlNDUzMWU1ZGUyNWJmYTViNmE4IiwidHlwIjoiSldUIn0.eyJuYmYiOjE1NTIyMzY5ODEsImV4cCI6MTU1MjI0MDU4MSwiaXNzIjoiaHR0cDovL2xvY2FsaG9zdDo1MDAwIiwiYXVkIjpbImh0dHA6Ly9sb2NhbGhvc3Q6NTAwMC9yZXNvdXJjZXMiLCJhcGkiXSwiY2xpZW50X2lkIjoiY2xpZW50Iiwic2NvcGUiOlsiYXBpIl19.GNX-gMxDDTzniaamYw9mOC159XfnP9AlkynOpYqvjSZJCduM6aqRIiwVbvMsak8GZhShPZpGggj8_ng5S-81M-VNbSlce5SImHckMXkBGXJ4A9OgsYemja7d3Mv-Lz43DkgWvTnoX1CfZl8PxBDueYlZOSLlqwlmYkN3S0TYuQwgXD0nKLyEnRTWy8meOAOkpuGzSabIcXBGwetMRrNZeooRtvYDuEe6d_Jfxi0o2-KD-TehB7n70D7ZFGnjTG2Ka5oJQrBKdaqY-Mqt42unJeV-faMhvjYkCxHqxRGtnue2zaCWWJdxP1wDu5VSRZjdfD4LoB29wfOwYeJxAalgvw", "expires_in": 3600, "token_type": "Bearer" }
复制从服务端拿到的token的值。
访问地址:
http://localhost:5001/api/values
Authorization:Bearer+空格+复制过来的Token
这个token就是从是服务端 5000端口的地址拿过来的token
这是postman去实现的。接下来咱们要写一个api的方式去实现