IdentityServer4系列(08)【单点登陆】

单点登陆,登陆一种客户端,其它客户端就不需要登陆了。

来到验证服务器Config.cs

public static IEnumerable<ApiResource> GetApis()
{
    return new ApiResource[]{
        new ApiResource("api1", "", new List<string>{"location"}){
            ApiSecrets = {new Secret("api1 secret".Sha256())}
        },
        new ApiResource("api2", "Express API")
    }
}

添加新的客户端:

new Client {
    ClientId = "",
    ClientName= ""
    ClientSecrets = {new Secret("flask secret".Sha256())},
    Enabled = true,
    RequireConsent = false,
    AllowRemberConsent = false,
    AccessTokenType = AccessTokenType.Jwt,
    AlwaysIncludeUserClaimsInIdToken = false,
    AllowOfflineAccess=true,
    RedirectUris = {http://localhost:7002/oidc_callback},
    AllowdScopes = {
        "api1",
        "api2",
        IdentityServerConstants.StandardScopes.OpenId,
        ......
    }
}

比如在一个web站点:

public async Task<IActionResut> AccessApis()
{
    var accessToken = await HttpContext.GetTokenAsync(OpenIdConnectParameterNames.AccessToken);
    var apiClient = new HttpClient();
    apiClient.SetBearerToken(accessToken);
    //api1
    var response1 = await apiClient.GetAsync("http://localhost:5001/identity");
    if(!response1.IsSuccessStatusCode)
    {
        throw new Exception("Access APi1 failed");
    }
    ViewData["api1"] = api1Result;
    //api2
    var apiClient2 = new HttpClient();
    apiClient2.SetBearerToken(accessToken);
    var response2 = await apiClient2.GetAsync(http://localhost:5002/me);
    if(!response2.IsSuccessStatusCode)
    {
        throw new Exception("access api2 failed");
    }
    var api2Result = await response2.Content.ReadAsStringAsync();
    ViewData["api2"] = api2Result;
    return View();
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值