实现代码:

(1)IdentityServer4授权服务器代码:

public static class Config

{  public static IEnumerable<IdentityResource> GetIdentityResources()  //对身份资源的配置

{

return new IdentityResource[]

{

new IdentityResources.OpenId(),  //此项必选

new IdentityResources.Profile(),

new IdentityResources.Email(),

new IdentityResources.Phone(),

new IdentityResources.Address(),

};

}

public static IEnumerable<ApiResource> GetApis()  //对API的配置

{

return new ApiResource[]

{

new ApiResource("api1", "My API #1")

};

}

public static IEnumerable<Client> GetClients()  //配置可访问客户

{

return new[]

{

// client credentials flow client

new Client

{

ClientId = "console client",

ClientName = "Client Credentials Client",

AllowedGrantTypes = GrantTypes.ClientCredentials,

ClientSecrets = { new Secret("511536EF-F270-4058-80CA-1C89C192F69A".Sha256()) },

AllowedScopes = {"api1" }

},

new Client

{

ClientId="password client",

AllowedGrantTypes=GrantTypes.ResourceOwnerPassword,

ClientSecrets={new Secret("password secret".Sha256())},

AllowedScopes={"api1",IdentityServerConstants.StandardScopes.OpenId,

IdentityServerConstants.StandardScopes.Profile,

IdentityServerConstants.StandardScopes.Address,

IdentityServerConstants.StandardScopes.Phone,

IdentityServerConstants.StandardScopes.Email

}

}

};

}

}

(2)对API的配置同ClientCredential,完全相同

(3)客户端代码,客户端还是需要NUGET安装IdentityModel库

static async Task Main(string[] args)

{

//Discovery endpoint

Console.WriteLine("Hello World!");

var client = new HttpClient();

var disco = await client.GetDiscoveryDocumentAsync("http://localhost:5000");

if (disco.IsError)

{

Console.WriteLine(disco.Error);

return;

}

//request access token

var tokenResponse = await client.RequestPasswordTokenAsync(new PasswordTokenRequest

{

Address=disco.TokenEndpoint,

ClientId="password client",

ClientSecret="password secret",

Scope="api1 openid profile email phone address",

UserName="bob",   //此处设置的密码应在identityserver4的TestUsers类中有定义

Password="bob"

});

if(tokenResponse.IsError)

{

Console.WriteLine(tokenResponse.Error);

return;

}

Console.WriteLine(tokenResponse.Json.ToString());

var clientApi = new HttpClient();

clientApi.SetBearerToken(tokenResponse.AccessToken);

var apiResponse =await clientApi.GetAsync("http://localhost:5002/api/values");

if (!apiResponse.IsSuccessStatusCode)

{

Console.WriteLine(apiResponse.StatusCode);

return;

}

var content = await apiResponse.Content.ReadAsStringAsync();

Console.WriteLine(content);

var clientUserInfo = new HttpClient();

clientUserInfo.SetBearerToken(tokenResponse.AccessToken);

var userinfoResponse = await clientUserInfo.GetAsync(disco.UserInfoEndpoint);

if(!userinfoResponse.IsSuccessStatusCode)

{

Console.WriteLine(userinfoResponse.StatusCode);

return;

}

var contentuserinfo = await userinfoResponse.Content.ReadAsStringAsync();

Console.WriteLine(contentuserinfo);

Console.WriteLine("llll");

}

}

IdentityServer4专题之六:Resource Owner Password Credentials的更多相关文章

  1. IdentityServer4之Resource Owner Password Credentials(资源拥有者密码凭据许可)

    IdentityServer4之Resource Owner Password Credentials(资源拥有者密码凭据许可) 参考 官方文档:2_resource_owner_passwords ...

  2. asp.net core IdentityServer4 实现 resource owner password credentials(密码凭证)

    前言 OAuth 2.0默认四种授权模式(GrantType) 授权码模式(authorization_code) 简化模式(implicit) 密码模式(resource owner passwor ...

  3. IdentityServer4 之 Resource Owner Password Credentials 其实有点尴尬

    前言 接着IdentityServer4的授权模式继续聊,这篇来说说 Resource Owner Password Credentials授权模式,这种模式在实际应用场景中使用的并不多,只怪其太开放 ...

  4. 不要使用Resource Owner Password Credentials

    不要使用Resource Owner Password Credentials 文章链接在这里 前言 最近公司项目在做一些重构,因为公司多个业务系统各自实现了一套登录逻辑,比较混乱.所以,现在需要做一 ...

  5. 使用Resource Owner Password Credentials Grant授权发放Token

    对应的应用场景是:为自家的网站开发手机 App(非第三方 App),只需用户在 App 上登录,无需用户对 App 所能访问的数据进行授权. 客户端获取Token: public string Get ...

  6. 基于 IdentityServer3 实现 OAuth 2.0 授权服务【密码模式(Resource Owner Password Credentials)】

    密码模式(Resource Owner Password Credentials Grant)中,用户向客户端提供自己的用户名和密码.客户端使用这些信息,向"服务商提供商"索要授权 ...

  7. 基于OWIN WebAPI 使用OAuth授权服务【客户端验证授权(Resource Owner Password Credentials Grant)】

    适用范围 前面介绍了Client Credentials Grant ,只适合客户端的模式来使用,不涉及用户相关.而Resource Owner Password Credentials Grant模 ...

  8. OAuth2.0学习(1-6)授权方式3-密码模式(Resource Owner Password Credentials Grant)

    授权方式3-密码模式(Resource Owner Password Credentials Grant) 密码模式(Resource Owner Password Credentials Grant ...

  9. ABP中使用OAuth2(Resource Owner Password Credentials Grant模式)

    ABP目前的认证方式有两种,一种是基于Cookie的登录认证,一种是基于token的登录认证.使用Cookie的认证方式一般在PC端用得比较多,使用token的认证方式一般在移动端用得比较多.ABP自 ...

随机推荐

  1. Docker 安装 Kibana

    使用和 elasticsearch 相同版本镜像 7.4.1 (不一样可能会出现问题) 1.下载Kibana镜像  # 下载Kibana镜像 docker pull kibana: # 查看镜像 do ...

  2. socket中文奇数个出现乱码的解决办法

    用MyEclipse试了一下JAVA获取系统正在运行进程代码,结果Console输出的时候中文部分输出为乱码,在网上找了很多办法,都没有解决问题.后来发现一个方法,解决了问题,特此分享. 下面成功解决 ...

  3. Laravel 6.X 数据库迁移 创建表 与 修改表

    数据库迁移创建表 本篇文章中使用的是mysql数据库,其他数据库需要修改env文件和app配置,请其他地方搜索一下就会找到. 创建示例 1.创建users表: 命令行键入 php artisan ma ...

  4. MySQL数据库备份还原

    本文以CentOS 7 yum安装的MariaDB-server5.5为例,说明MySQL的几种 备份还原方式 将服务器A(192.168.1.100)上的数据库备份,还原到B(192.168.1.2 ...

  5. linux mysql 查看数据库大小

    SELECT CONCAT(TRUNCATE(SUM(data_length)//,),'MB') AS data_size, CONCAT(TRUNCATE(SUM(max_data_length) ...

  6. 单元测试及框架简介 --junit、jmock、mockito、powermock的简单使用

    转 单元测试及框架简介 --junit.jmock.mockito.powermock的简单使用 2013年08月28日 14:33:06 luvinahlc 阅读数:6413 标签: 测试工具单元测 ...

  7. HTML、HTML5重难点

    一.XHTML与HTML的区别 文档结构 XHTML DOCTYPE 是强制性的 <html>中的 XML namespace 属性是强制性的 <html>.<head& ...

  8. DVWA靶机的命令执行漏洞

    之前在打攻防世界的时候出现过类似的题目,这里再重温一下 (靶机一共低中高三个安全等级,这里只演示低中等级) (1)Security:low 根据提示让我们输入地址ping一下,之后返回以下内容,可以判 ...

  9. requests库 代理

    import requests proxy = { 'http': '125.123.137.2208:9999' } res = requests.get('http://httpbin.org/i ...

  10. #5649,list&parallel

    // チケット5649 START // 画面項目.アカウント種別が0.1以外の場合のみ if(!CommonConstants.ACCOUNT_TYPE_SYSTEM_NEXT.equals(for ...