![](/img/trans.png)
[英]How to make Asp.Net Core Identity to work with OpenIdConnect
[英]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.