SteamOpenIdをASP.NetCoreアプリケーションに実装しようとしていますが、OpenIDを実装した経験がありません。
残念ながら、Steamにはドキュメントが大幅に不足しており、単に「OpenIDライブラリをダウンロードするだけ」と述べ、ドメイン名のAPIキーを登録するためのページを提供します。
完全なASP.Netで利用できる実装はいくつかありますが、Coreでは利用できません。また、いくつかの違いがあるようです。
Microsoft.AspNetCore.Authentication.OpenIdConnectを使用しようとしていますが、これが正しいライブラリであるかどうかは完全にはわかりません。「OpenID」と「OpenIDConnect」には違いがあるようです。
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」と「OpenIDConnect」には違いがあるようです。
OpenID1 / 2とOpenIDConnectはまったく異なるプロトコルです。
SteamはまだOpenID2.0を使用しているため、ASP.NETCoreのOpenIDConnectミドルウェアを使用して、Steamアカウントを使用してユーザーを認証することはできません。これは、2つのプロトコルに互換性/相互運用性がないためです。
私はこの質問があまり具体的ではないことを知っていますが、誰かがこれで私を正しい方向に向けることができますか?私は少し困惑しています。
あなたが言及したaspnet-contribSteamミドルウェアは、ASP.NETCore用に特別に開発された汎用OpenID2.0プロバイダーから派生しているため、おそらくあなたの最良の選択肢です(とはいえ、私はそれを書いた人なので、おそらくそうではありません目的)。
パッケージはNuGet.orgで見つけることができます:https://www.nuget.org/packages/AspNet.Security.OpenId.Steam/ 。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加