Asp.net core 身份服务器4

Asp.net core 身份服务器4,asp.net-core,oauth-2.0,identityserver4,Asp.net Core,Oauth 2.0,Identityserver4,初级查询警报。在阅读了教程之后,我推断- 我创建了一个授权服务器,其任务是为客户机颁发具有正确身份验证的令牌 我的授权服务器首先运行,包括API和客户端的信息和定义 API有一个身份验证中间件,用于验证传入的令牌,以确保其是否来自可信源及其作用域 客户端从授权服务器请求令牌,然后将请求发送到API,并接收令牌 对于所有这些,我必须首先运行授权服务器,然后是API,然后是客户机。我的要求是,我不需要一个单独运行的启动和停止服务器来处理身份验证。我有一个API,我需要它同时作为授权服务器。这可能吗?

初级查询警报。在阅读了教程之后,我推断-

  • 我创建了一个授权服务器,其任务是为客户机颁发具有正确身份验证的令牌
  • 我的授权服务器首先运行,包括API和客户端的信息和定义
  • API有一个身份验证中间件,用于验证传入的令牌,以确保其是否来自可信源及其作用域
  • 客户端从授权服务器请求令牌,然后将请求发送到API,并接收令牌

  • 对于所有这些,我必须首先运行授权服务器,然后是API,然后是客户机。我的要求是,我不需要一个单独运行的启动和停止服务器来处理身份验证。我有一个API,我需要它同时作为授权服务器。这可能吗?API是否可以在使用IdentityServer4的同时生成令牌、验证令牌,然后处理请求

    更新2020年1月:有关在与ASP.NET Core API控制器相同的项目中使用IdentityServer 4的ASP.NET Core 3.1示例,您可以查看我的。它的目标是测试AppInsights,但它确实演示了调用两个OpenID端点的SPA存根(⚠ 在非推荐的wa中,使用客户端凭据)和控制器端点


    虽然通常身份验证服务器将与资源服务器分开,但不需要这样做。您只需将所有内容添加到一个应用程序中即可。这里有一个例子

  • 创建一个新的ASP.NET核心(我使用的是2.0)Web API应用程序
  • 安装软件包IdentityServer4-版本2.0.0-rc1
    (在编写本文时,rc1是支持.NET Core 2.x的版本)
  • 安装软件包Microsoft.AspNetCore.Authentication.JwtBearer
  • 从模板中设置
    [Authorize]
    上的
    值控制器
  • 将此代码添加到
    app.UseMvc()上面的
    class Startup
    中的
    Configure(…)

    //为我们调用app.UseAuthentication()
    //见:http://docs.identityserver.io/en/release/quickstarts/6_aspnet_identity.html
    app.UseIdentityServer();
    
  • 将此代码添加到
    类启动中的
    配置服务(…)

    services.AddIdentityServer()
    .AddDeveloperSigningCredential()
    .AddInMemoryApiResources(新[]
    {
    新资源
    {
    Name=“MyApi”,
    ApiSecrets={newsecret(“supersecret.Sha256())},
    Scopes={newscope(“myapi”)},
    }
    })
    .AddInMemoryClients(新[]
    {
    新客户
    {
    ClientId=“api”,
    ClientSecrets={newsecret(“supersecret.Sha256())},
    AllowedGrantTypes=GrantTypes.ResourceOwnerPassword,
    AllowedScopes={“myapi”},
    }
    })
    .AddTestUsers(新列表)
    {
    新测试用户
    {
    SubjectId=“some-unique-id-12345678980”,
    用户名=“约翰”,
    密码=“123456”
    }
    });
    services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
    .AddJwtBearer(选项=>
    {
    选择权限=”http://localhost:51689";
    opts.academy=“MyApi”;
    opts.requirehttpsmatadata=!env.IsDevelopment();
    });
    
  • 如果你现在F5的应用程序,它将显示一个空白页,因为“401未经授权”的响应。您现在还可以检查此端点:
    http://localhost:51689/.well-已知/openid配置
    (当然是您的开发端口)

    您现在也可以这样做:

    curl-X POST\
    http://localhost:51689/connect/token \
    -H'授权:基本YXBpY2xpZW50aWQ6c3VwZXJzZWNyZXQ='\
    -H'缓存控制:无缓存'\
    -H'内容类型:应用程序/x-www-form-urlencoded'\
    -d'username=john&password=123456&grant\u type=password'
    
    请注意,
    authorization
    标题包含一个base64编码的字符串,表示字符串
    “apiclientid:supersecret”
    。这将为您提供如下结果:

    {
    “访问令牌”:"我认为,这是一个非常重要的问题。我认为这是一个非常重要的问题2.2.SXW是一个很好的书,他在一个书中提出了一个关于关于某个关于某个关于某个关于某个关于某个关于某个关于某个关于某个关于某个关于某个关于某个关于某个关于某个关于某个关于某个关于某个关于某个关于某个关于某个关于某个关于某个关于某个关于某个关于某个关于某个关于某个关于某个关于某个关于某个关于某个关于某个关于某个关于某个关于某个关于某个关于某个关于某个关于某个关于某个关于某个关于某个关于某个关于某个关于某个关于某个关于某个关于某个关于某个关于某个关于某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某5GHKFN0J6SWIST5RY3NKS\U t1P9-tnCDKBOAafaXjLEO3Kx4fP4xTgwK92uKcEDDnRZo-T0CkBxnSQm0oz1sUyrW8\u 3Pg“,
    “expires_in”:3600,
    “令牌类型”:“承载者”
    }
    
    除了切换到其他身份验证流的选项外,还可以添加如下控制器方法:

    [路由(“api/令牌”)]
    公共类令牌控制器
    {
    [HttpPost(“请求”)]
    公共异步任务请求(字符串用户名、字符串密码)
    {
    var tokenClient=新的tokenClient(“http://localhost:51689/connect/token","apiclientid","supersecret",;
    var tokenResponse=wait tokenClient.RequestResourceOwnerPasswordAsync(用户名、密码);
    if(tokenResponse.IsError){/*日志登录尝试失败!*/}
    返回tokenResponse.Json;
    }
    }
    
    然后这样称呼它:

    curl-X POST\
    http://localhost:51689/api/token/request \
    -H'缓存控制:无缓存'\
    -H'内容类型:应用程序/x-www-form-urlencoded'\
    -d'username=john&password=123456'
    
    这将给出与上述类似的响应

    您现在可以提供此
    access\u令牌
    insde a头