我正在尝试将蒸汽OpenId实现到我的ASP.Net核心应用程序中,而且我以前没有任何实现OpenID的经验。
不幸的是,蒸汽公司这方面的文档严重缺乏,只需声明“只需下载一个OpenID库”,并为您提供一个页面来注册域名的API密钥。
有几种实现可以用于完整的ASP.Net,但不能用于Core,而且似乎有一些不同之处。
我正在尝试使用Microsoft.AspNetCore.Authentication.OpenIdConnect,尽管我并不完全确定这是否是正确的库。"OpenID“和"OpenID连接”似乎有区别。
我在我的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规范指出,这个信息是应该在JSON中。
接下来,我尝试注册自己的OpenIdConnectMiddleware,就像这 ASP.Net执行的方式一样,然而,由于缺少OpenIdConnectMiddleware类所需的服务,这导致无法构建:
'TestApplication.SteamOpenId.SteamAuthenticationMiddleware‘:“无法找到适合类型System.InvalidOperationException的构造函数。确保该类型是具体的,并为公共构造器的所有参数注册服务。
我的实施:
public class SteamAuthenticationMiddleware : OpenIdConnectMiddleware
{
public SteamAuthenticationMiddleware(
RequestDelegate next,
IDataProtectionProvider dataProtectionProvider,
ILoggerFactory loggerFactory,
UrlEncoder encoder,
IServiceProvider services,
IOptions<SharedAuthenticationOptions> sharedOptions,
IOptions<OpenIdConnectOptions> options,
HtmlEncoder htmlEncoder) :
base(
next,
dataProtectionProvider,
loggerFactory,
encoder,
services,
sharedOptions,
options,
htmlEncoder)
{
}
protected override AuthenticationHandler<OpenIdConnectOptions> CreateHandler() => new SteamAuthenticationHandler();
}我知道这个问题不是很具体,但谁能给我指出正确的方向呢?我有点困惑。
发布于 2017-06-11 19:24:37
"OpenID“和"OpenID Connect”似乎有区别。
有: OpenID 1/2和OpenID连接是完全不同的协议。
由于这两种协议是不兼容/互操作的,所以您不能使用OpenID 2.0使用ASP.NET Core的OpenID连接中间件来验证您的用户使用他们的蒸汽帐户。
我知道这个问题不是很具体,但谁能给我指出正确的方向呢?我有点困惑。
您提到的aspnet-contrib蒸汽中间件来自专门为ASP.NET核心开发的通用ASP.NET 2.0提供程序,因此可能是您最好的选择(也就是说,我是编写它的人,所以我很可能不是客观的)。
您可以在NuGet.org:https://www.nuget.org/packages/AspNet.Security.OpenId.Steam/上找到这个包。
https://stackoverflow.com/questions/44487710
复制相似问题