簡體   English   中英

ASP.Net核心OpenIdConnect Steam

[英]ASP.Net Core OpenIdConnect Steam

我正在嘗試將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規范聲明此信息應為JSON

接下來我嘗試注冊我自己的OpenIdConnectMiddleware ,就像這個 ASP.Net實現的方式一樣,但是,由於缺少OpenIdConnectMiddleware類所需的服務,導致無法構建它:

System.InvalidOperationException:'無法找到類型'TestApplication.SteamOpenId.SteamAuthenticationMiddleware'的合適構造函數。 確保類型是具體的,並為公共構造函數的所有參數注冊服務。

我的實施:

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();
}

我知道這個問題不是很具體,但有人能指出我正確的方向嗎? 我有點難過。

似乎“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/。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM