IdentityServer4【Topic】Consent

Conset这个概念在Identityserver4中是表示要当前用户对第三方应用对资源请求的一个确认,它会被做成一个页面。

术语映射:

Consent page--确认页面,我喜欢叫做Consent页面。

outcome of the consent/outcome--确认结果/结果

Consent

确认

在请求授权期间,如果IdentityServer 要求当前用户确认一些信息,浏览器会被重定向到Consent页面。

Consent用来让一个终端用户为一个第三方应用获取受保护的资源进行授权,这个受保护的资源可能是Identity Resource,或者是API Resource。Consent对于第三方应用来说是一个典型的应用,当然,也可以在Client中设置。

Consent Page

确认页面

如果想让用户进行授权确认,就必须提供一个Consent页面。在这里由详细的说明。

一个Consent页面通常会渲染一些名字,包括用户的名字(在Identityserver的登陆中已经获取了)、第三方应用的名字、第三方应用的logo、第三方应用的其他信息、第三方应用请求的资源列表(用Scope来表示)。此外,Consent 页面也允许用户使用“记住”这个选项来配置下次同样的客户端访问时不用继续重定向到Consent页面。

一旦用户提供了确认信息,Consent页面必须通知Identityserver,并且浏览器随后会被重定向到授权端点。

Authorization Context

授权上下文

Identityserver会传递一个returnUrl参数给Consent页面,这个参数包含了授权请求的一些参数。这些参数为Consent页面提供了上下文的信息,并且这些信息能够被IIdentityServerInteractionService 读取。GetAuthorizationContextAsync方法会返回一个AuthorizationRequest实例。

关于客户端和资源的更多的信息可以从IClientStore和IResourceStore这两个接口中获取。

Informing IdentityServer of the consent result

将确认结果通知到IdentityServer

IIdentityServerInteractionService 的GrantConsentAsync方法让Consent页面通知Identityserver,这个方法将Conset的结果传入,Consent的结果可能是用户点击了同意,或者点击了取消/拒绝。

Identityserver会临时的存储Consent的结果。默认情况下会使用Cookie来存储。因为它只需要将这个Consent的结果传递到授权端点这么点儿时间,所以用Cookie来暂时的存储就足够了。

这个临时的存储不同于用户点击了“记住”选项,后者会被持久化。如果希望在Consent页面和授权重定向之间使用其他持久性,那么可以实现IMessageStore<ConsentResponse>并在DI中注册实现

Returning the user to the authorization endpoint

将用户返回到授权端点

一旦Consent页面通知了IdentityServer确认结果,用户将会被重定向到returnUrl(里面由一个redirect_url参数)。你的Consent页面应该通过验证returnUrl是有效的来防止打开重定向。这个功能可以用IIdentityInteractionService提供的IsValidReturnUrl 来解决。再或者,如果GetAuthorizationContextAsync 返回一个不为空的对象,你同样可以认为returnUrl是有效的。

 

posted @ 2018-12-13 12:08  wall-ee  阅读(474)  评论(0编辑  收藏  举报