ASP.Net核心OpenIdConnect Steam

时间:2017-06-11 19:09:24

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

我正在尝试将Steam OpenId实施到我的ASP.Net Core应用程序中,而且我之前没有任何实施OpenID的经验。
不幸的是,Steam大量缺乏文档,只是说“只需下载一个OpenID库”,并为您提供一个页面来注册域名的API密钥。

有几种可用于完整ASP.Net的实现,但不适用于Core,似乎存在一些差异。

我正在尝试使用Microsoft.AspNetCore.Authentication.OpenIdConnect,但我不完全确定这是否是正确的库。似乎“OpenID”和“OpenID Connect”之间存在差异。

我在Startup.cs中设置了身份验证,如下所示:

app.UseOpenIdConnectAuthentication(new OpenIdConnectOptions
{
    DisplayName = "Steam",
    Authority = "http://steamcommunity.com/openid",
    ClientId = "MyClientId",
    ClientSecret = "ApiKeyHere",
    SignInScheme = "SignInCookie",
    CallbackPath = new PathString("/Account/SteamCallback"),
    RequireHttpsMetadata = false
});

但是只要我点击登录页面,其中包含一个返回挑战的操作:

public IActionResult SignIn()
{
    return Challenge();
}

我收到错误

  

JsonReaderException:解析值时遇到意外的字符:<。路径'',第0行,第0位。
  Newtonsoft.Json.JsonTextReader.ParseValue()InvalidOperationException:
  IDX10803:无法从“http://steamcommunity.com/openid/.well-known/openid-configuration”获得配置。

当我查看此URL时,它似乎返回了OpenID配置的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>

但OpenID规范声明此信息should be in JSON

接下来我尝试注册我自己的OpenIdConnectMiddleware,就像ASP.Net实现的this一样,但是由于缺少{{1的服务'而导致无法构建class要求:

  

System.InvalidOperationException:'适合类型的构造函数   'TestApplication.SteamOpenId.SteamAuthenticationMiddleware'不可能   位于。确保类型具体并注册服务   公共构造函数的所有参数。'

我的实施:

OpenIdConnectMiddleware

我知道这个问题不是很具体,但有人能指出我正确的方向吗?我有点难过。

1 个答案:

答案 0 :(得分:2)

  

似乎“OpenID”和“OpenID Connect”之间存在差异。

有:OpenID 1/2和OpenID Connect是完全不同的协议。

Steam仍在使用OpenID 2.0,因此您无法使用ASP.NET Core的OpenID Connect中间件使用其Steam帐户对您的用户进行身份验证,因为这两个协议不兼容/可互操作。

  

我知道这个问题不是很具体,但有人能指出我正确的方向吗?我有点难过。

您提到的aspnet-contrib Steam中间件源自专为ASP.NET Core开发的通用OpenID 2.0提供程序,因此可能是您的最佳选择(就是说,我是那个写它的人,所以我'可能不客观)。

您可以在NuGet.org上找到该软件包:https://www.nuget.org/packages/AspNet.Security.OpenId.Steam/