首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ASP.Net芯OpenIdConnect蒸汽

ASP.Net芯OpenIdConnect蒸汽
EN

Stack Overflow用户
提问于 2017-06-11 19:09:23
回答 1查看 1.6K关注 0票数 3

我正在尝试将蒸汽OpenId实现到我的ASP.Net核心应用程序中,而且我以前没有任何实现OpenID的经验。

不幸的是,蒸汽公司这方面的文档严重缺乏,只需声明“只需下载一个OpenID库”,并为您提供一个页面来注册域名的API密钥。

有几种实现可以用于完整的ASP.Net,但不能用于Core,而且似乎有一些不同之处。

我正在尝试使用Microsoft.AspNetCore.Authentication.OpenIdConnect,尽管我并不完全确定这是否是正确的库。"OpenID“和"OpenID连接”似乎有区别。

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

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

但一旦我点击了登录页面,其中包含了一个返回挑战的动作:

代码语言:javascript
复制
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数据:

代码语言:javascript
复制
<?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的构造函数。确保该类型是具体的,并为公共构造器的所有参数注册服务。

我的实施:

代码语言:javascript
复制
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();
}

我知道这个问题不是很具体,但谁能给我指出正确的方向呢?我有点困惑。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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/上找到这个包。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44487710

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档