如何在ASP.NET Core 2中配置OpenID Connect for Steam?

时间:2018-01-21 03:12:44

标签: asp.net asp.net-core-2.0 steam-web-api

我正在尝试使用ASP.Net Core 2通过Steam API进行身份验证和登录用户。

我的成功有限。我想我需要以下参数:

    providerURL: 'http://steamcommunity.com/openid',
    stateless: true,
    // How the OpenID provider should return the client to us
    returnURL: 'http://localhost:4000/auth/openid/return',
    realm: 'http://localhost:4000/',

我正在尝试通过AddOpenIDConnect机制添加身份验证。

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddDbContext<ApplicationDbContext>(options =>
            options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));

        services.AddIdentity<ApplicationUser, IdentityRole>()
            .AddEntityFrameworkStores<ApplicationDbContext>()
            .AddDefaultTokenProviders();

        services.AddAuthentication().AddOpenIdConnect(steamOptions =>
        {
            steamOptions.ClientId = "<APIKEY>";
            steamOptions.ClaimsIssuer = "https://steamcommunity.com/openid";
        }

这不起作用。显然,必须有一种更好的方法来称呼它。

我遇到过一个值得注意的事情:Postman的GET请求返回一个XML文件:

<?xml version="1.0" encoding="UTF-8"?>
<xrds:XRDS xmlns:xrds="xri://$xrds" xmlns="xri://$xrd*($v*2.0)">
<XRD>
    <Service priority="0">
        <Type>http://specs.openid.net/auth/2.0/server</Type>
        <URI>https://steamcommunity.com/openid/login</URI>
    </Service>
</XRD>
</xrds:XRDS>

我们有什么方法可以强制service.AddAuthentication()来解析XML?

1 个答案:

答案 0 :(得分:3)

我用最近建造的KévinChalet的AspNet.Security.OpenID.Steam library解决了这个问题。你需要在ASP.Net Core 2中使用2.0.0-rc2-final。

您需要做的就是将services.AddAuthentication()。AddSteam()添加到ConfigureServices中,就像这样(它不是那里唯一的服务):

public void ConfigureServices(IServiceCollection services)
{
    services.AddAuthentication().AddSteam();
}

请注意,您需要安装Asp.Net Core 2 Web MVC模板和Identity生成的其他默认服务。