【问题标题】:IdentityServer4 Creating Access Token From External ProviderIdentityServer4 从外部提供者创建访问令牌
【发布时间】:2020-06-08 10:45:03
【问题描述】:

我正在将 IdentityServer4 与外部提供商 (Google Auth) 一起使用。如何在成功登录 Google 的基础上生成访问令牌?我想注入我自己的声明。

【问题讨论】:

    标签: asp.net-core oauth-2.0 identityserver4 openid-connect


    【解决方案1】:

    如果在 Identity Server 中实现外部登录(Google Auth),Identity server 从外部 provider 接收到 id token 后,会解码 token 并获取用户的 claim ,登录 user ,然后创建 Identity server 自己的 token 最后返回您的客户端应用程序。

    如果你想添加自定义cliams来访问Identity Server颁发的令牌,你可以实现IProfileService

    public class MyProfileService : IProfileService
    {
        public MyProfileService()
        { }
    
        public Task GetProfileDataAsync(ProfileDataRequestContext context)
        {
    
            var claims = new List<Claim>()
            {
    
                new Claim("TestKey", "TestValue")
            };
            context.IssuedClaims.AddRange(claims);
            return Task.CompletedTask;
        }
    
        public Task IsActiveAsync(IsActiveContext context)
        {
            // await base.IsActiveAsync(context);
            return Task.CompletedTask;
        }
    }
    

    在 DI 注册:

    services.AddTransient<IProfileService, MyProfileService>();
    

    【讨论】:

    • 我了解 ProfileService,但我不了解在何处或何时创建新的访问令牌。我会在 Google 的回调中假设,如果是这样,如何?
    • 当您不太了解它的工作原理时,有时很难提出正确的问题。我的流程包括:客户端应用程序调用我的 ID4 服务器,将用户重定向到 Google 登录。我成功登录并重定向到外部回调方法。从那里我想注入我自己的声明并将访问令牌发回客户端应用程序。我想在客户端应用程序的一次往返中完成此操作。
    • @JohnRowland ,在外部回调方法中,IDS4 将从外部身份提供者那里获取声明并为用户发出身份验证 cookie,但它会重定向到回调 url,其中 ids4 中间件将继续处理令牌,令牌服务在 AddIdentityServer 中注册并且不公开,但所有逻辑都在身份服务器端,并且“在客户端应用程序的单次往返中”。您可以使用公开的服务/事件来自定义行为,例如 IProfileService
    猜你喜欢
    • 2017-03-29
    • 2021-02-20
    • 1970-01-01
    • 1970-01-01
    • 2018-09-23
    • 2018-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多