IdentityServer4 中文文档 -13- (快速入门)切换到混合流并添加 API 访问


原文:http://docs.identityserver.io/en/release/quickstarts/5_hybrid_and_api_access.html

目 录

上一篇:IdentityServer4 中文文档 -12- (快速入门)添加外部认证支持

下一篇:IdentityServer4 中文文档 -14- (快速入门)使用 ASP.NET Core Identity

在之前的快速入门中我们探讨了 API 访问和用户认证。现在我们想要把这两部分结合起来。

OpenID Connect 和 OAuth 2.0 结合的美妙之处在于,你既可以使用单一的协议,也可以向令牌服务做一次往返交互。

之前我们使用的是 OpenID Connect 隐式流。在隐式流中所有令牌都通过浏览器来传输,这对于 身份令牌 来说是完全没有问题的。现在我们还想要请求一个 访问令牌

与身份令牌相比,访问令牌更加敏感,如果没有必要,我们是不会想将他们暴露给“外部世界”的。OpenID Connect 包含了一个叫做 “混合流(Hybrid flowe)” 的流,它为我们提供了两方面优点 —— 身份令牌通过浏览器频道来传输,这样客户端就能够在做任何工作前验证它;如果验证成功了,客户端就会打开一个后端通道来连接令牌服务以检索访问令牌。

修改客户端配置

需要修改的东西不是很多。首先我们想要允许客户端使用混合流(Hybrid Flow),另外我们还想要客户端允许服务于服务之间的 API 调用,并且这种调用不会与用户上下文混杂在一起(这与我们的客户端凭证快速入门非常相似)。这是使用 AllowedGrantTypes 属性来表示的。

然后我们要添加一个客户端密码,这将被用于在后端通道上检索访问令牌。

最后我们还要允许客户端访问 offline_access scope - 这允许为长期使用的 API 访问请求刷新令牌:

new Client
{
ClientId = "mvc",
ClientName = "MVC 客户端",
AllowedGrantTypes = GrantTypes.HybridAndClientCredentials, ClientSecrets =
{
new Secret("secret".Sha256())
}, RedirectUris = { "http://localhost:5002/signin-oidc" },
PostLogoutRedirectUris = { "http://localhost:5002/signout-callback-oidc" }, AllowedScopes =
{
IdentityServerConstants.StandardScopes.OpenId,
IdentityServerConstants.StandardScopes.Profile,
"api1"
},
AllowOfflineAccess = true
};

修改 MVC 客户端

对 MVC 客户端的修改同样也很少 - ASP.NET Core OpenID Connect 中间件是内置支持混合流的,所以我们只需要更改一些配置值。

我们配置 ClientSecret 以让它跟 IdentityServer 上的信息相匹配。添加 offline_access scopes,然后设置 ResponseTypecode id_token(基本的意思就是“使用混合流”)

app.UseOpenIdConnectAuthentication(new OpenIdConnectOptions
{
AuthenticationScheme = "oidc",
SignInScheme = "Cookies", Authority = "http://localhost:5000",
RequireHttpsMetadata = false, ClientId = "mvc",
ClientSecret = "secret", ResponseType = "code id_token",
Scope = { "api1", "offline_access" }, GetClaimsFromUserInfoEndpoint = true,
SaveTokens = true
});

当你运行 MVC 客户端的时候,不会有太大的区别。除此之外,授权确认页现在还会向你请求访问 额外的 API 和 离线访问(offline access) scope。

使用访问令牌

OpenID Connect 中间件会自动为你保存令牌(身份令牌,访问令牌和现在我们例子中的刷新令牌)。这就是 SaveTokens 设置的效果。

技术上,令牌是存储在 cookie 的属性片段之内的,访问它们最简单的方式是使用 Microsoft.AspNetCore.Authentication 名称空间下的扩展方法。

比如在你的身份信息视图上:

<dt>access token</dt>
<dd>@await ViewContext.HttpContext.Authentication.GetTokenAsync("access_token")</dd> <dt>refresh token</dt>
<dd>@await ViewContext.HttpContext.Authentication.GetTokenAsync("refresh_token")</dd>

为了使用访问令牌访问 API,你所需要做的只是检索令牌,然后将其设置到你的 HttpClient 中:

public async Task<IActionResult> CallApiUsingUserAccessToken()
{
var accessToken = await HttpContext.Authentication.GetTokenAsync("access_token"); var client = new HttpClient();
client.SetBearerToken(accessToken);
var content = await client.GetStringAsync("http://localhost:5001/identity"); ViewBag.Json = JArray.Parse(content).ToString();
return View("json");
}

目 录

上一篇:IdentityServer4 中文文档 -12- (快速入门)添加外部认证支持

下一篇:IdentityServer4 中文文档 -14- (快速入门)使用 ASP.NET Core Identity

IdentityServer4 中文文档 -13- (快速入门)切换到混合流并添加 API 访问的更多相关文章

  1. IdentityServer4 中文文档 -14- (快速入门)使用 ASP.NET Core Identity

    IdentityServer4 中文文档 -14- (快速入门)使用 ASP.NET Core Identity 原文:http://docs.identityserver.io/en/release ...

  2. IdentityServer4 中文文档 -12- (快速入门)添加外部认证支持

    IdentityServer4 中文文档 -12- (快速入门)添加外部认证支持 原文:http://docs.identityserver.io/en/release/quickstarts/4_e ...

  3. IdentityServer4 中文文档 -8- (快速入门)设置和概览

    IdentityServer4 中文文档 -8- (快速入门)设置和概览 原文:http://docs.identityserver.io/en/release/quickstarts/0_overv ...

  4. IdentityServer4 中文文档 -16- (快速入门)使用 EntityFramework Core 存储配置数据

    IdentityServer4 中文文档 -16- (快速入门)使用 EntityFramework Core 存储配置数据 原文:http://docs.identityserver.io/en/r ...

  5. IdentityServer4 中文文档 -15- (快速入门)添加 JavaScript 客户端

    IdentityServer4 中文文档 -15- (快速入门)添加 JavaScript 客户端 原文:http://docs.identityserver.io/en/release/quicks ...

  6. IdentityServer4 中文文档 -11- (快速入门)添加基于 OpenID Connect 的用户认证

    IdentityServer4 中文文档 -11- (快速入门)添加基于 OpenID Connect 的用户认证 原文:http://docs.identityserver.io/en/releas ...

  7. IdentityServer4 中文文档 -9- (快速入门)使用客户端凭证保护API

    IdentityServer4 中文文档 -9- (快速入门)使用客户端凭证保护API 原文:http://docs.identityserver.io/en/release/quickstarts/ ...

  8. IdentityServer4 中文文档 -10- (快速入门)使用密码保护API

    IdentityServer4 中文文档 -10- (快速入门)使用密码保护API 原文:http://docs.identityserver.io/en/release/quickstarts/2_ ...

  9. IdentityServer4【QuickStart】之切换到混合流并且添加API访问

    切换到混合流并且添加API访问 前面的示例中我们开发了API访问和用户认证,现在我们要将两个合并到一起. OpenID Connect&OAuth 2.0组合的美妙之处是,你可以使用单一协议和 ...

随机推荐

  1. 扁平化promise调用链(译)

    这是对Flattened Promise Chains的翻译,水平有限请见谅^ ^. Promises对于解决复杂异步请求与响应问题堪称伟大.AngularJS提供了$q和$http来实现它:还有很多 ...

  2. 启动eclipse could not create the java Vittual Machine

    查询并几种方法: 1.都说是 eclipse.ini  环境初始文件的内存问题,续增大堆内存大小,具体配置如,如果找不到问题所在可以试试(该方法是确定环境变量没问题下试行) -Xms64m-Xmx25 ...

  3. 手机端-万种bt在线观看器,安卓正版下载!

    安卓正版下载, 点击下载 无广告,完全免费!寻找任何你想要的资源!

  4. JS自定义鼠标右击菜单

    自定义鼠标右击菜单要素: 禁止页面默认右击事件 设置右击菜单的样式以及菜单出现的位置(通过捕获鼠标点击位置来确定菜单的位置) 鼠标在指定控件(区域)上右击时显示菜单(默认菜单隐藏,点击鼠标右键时显示) ...

  5. eclipse项目无故报错,markers信息为An error occurred while filtering resources

    eclipse项目无故报错,markers信息为An error occurred while filtering resources 描述:eclipse项目和resource文件上有红色的叉,其m ...

  6. 在windows上安装wamp时遇到apache无法启动,图标为橙色

    1.首先测试端口号是否被占用,如果端口号被占用,修改相对应文件的端口号,修改端口号的方法网上很容易搜到. 2.如果端口号没有被占用,cd到httpd.exe目录下,查看错误原因,这里我显示的错误是ht ...

  7. asp.net中的Filter类型其实是被当作单例的

    Filter对请求进行过滤.例如,在进行身份验证的基础上增加一些权限判断,对于身份验证通过的用户,检测其是否有开通UserSpace,如果没有则在Response中说明.示例代码如下: public ...

  8. 8.快速索引、listview

    实现这样的效果 布局: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" ...

  9. Kali学习笔记6:二层发现

    先介绍下ARPING命令: arping命令是用于发送ARP请求到一个相邻主机的工具 arping使用arp数据包,通过PING命令检查设备上的硬件地址.能够测试一个IP地址是否是在网络上已经被使用, ...

  10. AI - 框架(Frameworks)

    1 - Scikit-Learn Sklearn(scikit-learn: machine learning in Python):https://scikit-learn.org/ 文档丰富而又详 ...