如何在 ASP.NET 核心 3.0 身份中配置 Twitter 外部身份验证
How To Configure Twitter External Authentication in ASP.NET Core 3.0 Identity
我已将 Twitter 外部登录 NuGet 程序包添加到我的 ASP.NET Core 3 应用程序,如以下 Microsoft 页面所述。
Twitter external sign-in setup with ASP.NET Core
这是文档的一部分的屏幕截图:
Configure Twitter Authentication DefaultScheme
现在我正在尝试访问和修改由 NuGet 安装自动设置的 /signin-twitter 默认回调。另外,我想设置我自己的 DefaultScheme 来处理身份验证。
我有 2 个问题。
如何访问和修改Twitter认证NuGet包自动设置的/signin-twitter默认回调中的代码?应用程序文件结构中没有 /signin-twitter 文件或组件。并且搜索没有找到任何文件中提到的“signin-twitter”文本。 /signin-twitter 代码位于何处?
在随附的屏幕截图中,您会看到措辞“AddAuthentication(String) 重载设置 DefaultScheme 属性”。但是该文档没有说明如何执行此操作的示例。如何使用 AddAuthentication(String) 设置我自己的 DefaultScheme 来处理身份验证?它应该是什么类型的代码文件?
如有任何帮助,我们将不胜感激。提前谢谢你。
我不太了解方案之类的,但是如果你想自定义Twitter回调,你需要自己制作TwitterOptions
和TwitterHandler
。
如果你查看 AddTwitter
的源代码,发现 here,你可以看到它使用 TwitterOptions
和 TwitterHandler
类,这些基本上是告诉 OAuth 如何行为的配置。
return builder.AddRemoteScheme<TwitterOptions, TwitterHandler>(authenticationScheme, displayName, configureOptions);
如果您愿意,您似乎也可以通过身份验证方案。
如果要自定义回调,则需要更改 HandleRemoteAuthenticateAsync
。
我还没有尝试过,但你可能会在下面做类似的事情。
MyTwitterHandler.cs
public class MyTwitterHandler: TwitterHandler {
protected override async Task<HandleRequestResult> HandleRemoteAuthenticateAsync()
{
var result = await base.HandleRemoteAuthenticateAsync();
//write custom code here
return result;
}
}
Extensions.cs
public static AuthenticationBuilder AddMyTwitter(this AuthenticationBuilder builder, Action<TwitterOptions> configureOptions)
{
builder.Services.TryAddEnumerable(ServiceDescriptor.Singleton<IPostConfigureOptions<TwitterOptions>, TwitterPostConfigureOptions>());
return builder.AddRemoteScheme<TwitterOptions, MyTwitterHandler>("MyAuthenticationScheme", TwitterDefaults.DisplayName, configureOptions);
}
Startup.cs
.AddMyTwitter(options => {
});`
回调URL可以通过在设置推特验证时添加回调选项来自定义:
services.AddAuthentication().AddTwitter(twitterOptions =>
{
...
twitterOptions.CallbackPath = new PathString("/signin-twitter2");
});
默认回调路径“/signin-twitter”定义自TwitterOptions.cs, which can be overridden above. The RemoteAuthenticationHandler.cs 将检查请求是否匹配此回调路径并采取行动。
要在 successful Twitter login, define OnCreatingTicket event 上实施额外的业务逻辑:
services.AddAuthentication().AddTwitter(twitterOptions =>
{
...
twitterOptions.Events = new TwitterEvents()
{
OnCreatingTicket = context =>
{
System.Diagnostics.Debug.WriteLine($"TwitterEvents.OnCreatingTicket: UserId = {context.UserId}");
System.Diagnostics.Debug.WriteLine($"TwitterEvents.OnCreatingTicket: AccessToken = {context.AccessToken}");
System.Diagnostics.Debug.WriteLine($"TwitterEvents.OnCreatingTicket: AccessTokenSecret = {context.AccessTokenSecret}");
System.Diagnostics.Debug.WriteLine($"TwitterEvents.OnCreatingTicket: User = {context.User}");
return Task.CompletedTask;
}
};
...
// Commented because probably you are not asking for this
//twitterOptions.CallbackPath = new PathString("/signin-twitter2");
});
可以这样自定义身份验证方案:
services.AddAuthentication(options => {
...
options.DefaultChallengeScheme = "abc";
})
.AddTwitter("abc", options => {
...
})
您可以参考 official documentation 进一步说明。
我已将 Twitter 外部登录 NuGet 程序包添加到我的 ASP.NET Core 3 应用程序,如以下 Microsoft 页面所述。
Twitter external sign-in setup with ASP.NET Core
这是文档的一部分的屏幕截图: Configure Twitter Authentication DefaultScheme
现在我正在尝试访问和修改由 NuGet 安装自动设置的 /signin-twitter 默认回调。另外,我想设置我自己的 DefaultScheme 来处理身份验证。
我有 2 个问题。
如何访问和修改Twitter认证NuGet包自动设置的/signin-twitter默认回调中的代码?应用程序文件结构中没有 /signin-twitter 文件或组件。并且搜索没有找到任何文件中提到的“signin-twitter”文本。 /signin-twitter 代码位于何处?
在随附的屏幕截图中,您会看到措辞“AddAuthentication(String) 重载设置 DefaultScheme 属性”。但是该文档没有说明如何执行此操作的示例。如何使用 AddAuthentication(String) 设置我自己的 DefaultScheme 来处理身份验证?它应该是什么类型的代码文件?
如有任何帮助,我们将不胜感激。提前谢谢你。
我不太了解方案之类的,但是如果你想自定义Twitter回调,你需要自己制作TwitterOptions
和TwitterHandler
。
如果你查看 AddTwitter
的源代码,发现 here,你可以看到它使用 TwitterOptions
和 TwitterHandler
类,这些基本上是告诉 OAuth 如何行为的配置。
return builder.AddRemoteScheme<TwitterOptions, TwitterHandler>(authenticationScheme, displayName, configureOptions);
如果您愿意,您似乎也可以通过身份验证方案。
如果要自定义回调,则需要更改 HandleRemoteAuthenticateAsync
。
我还没有尝试过,但你可能会在下面做类似的事情。
MyTwitterHandler.cs
public class MyTwitterHandler: TwitterHandler {
protected override async Task<HandleRequestResult> HandleRemoteAuthenticateAsync()
{
var result = await base.HandleRemoteAuthenticateAsync();
//write custom code here
return result;
}
}
Extensions.cs
public static AuthenticationBuilder AddMyTwitter(this AuthenticationBuilder builder, Action<TwitterOptions> configureOptions)
{
builder.Services.TryAddEnumerable(ServiceDescriptor.Singleton<IPostConfigureOptions<TwitterOptions>, TwitterPostConfigureOptions>());
return builder.AddRemoteScheme<TwitterOptions, MyTwitterHandler>("MyAuthenticationScheme", TwitterDefaults.DisplayName, configureOptions);
}
Startup.cs
.AddMyTwitter(options => {
});`
回调URL可以通过在设置推特验证时添加回调选项来自定义:
services.AddAuthentication().AddTwitter(twitterOptions => { ... twitterOptions.CallbackPath = new PathString("/signin-twitter2"); });
默认回调路径“/signin-twitter”定义自TwitterOptions.cs, which can be overridden above. The RemoteAuthenticationHandler.cs 将检查请求是否匹配此回调路径并采取行动。
要在 successful Twitter login, define OnCreatingTicket event 上实施额外的业务逻辑:
services.AddAuthentication().AddTwitter(twitterOptions => { ... twitterOptions.Events = new TwitterEvents() { OnCreatingTicket = context => { System.Diagnostics.Debug.WriteLine($"TwitterEvents.OnCreatingTicket: UserId = {context.UserId}"); System.Diagnostics.Debug.WriteLine($"TwitterEvents.OnCreatingTicket: AccessToken = {context.AccessToken}"); System.Diagnostics.Debug.WriteLine($"TwitterEvents.OnCreatingTicket: AccessTokenSecret = {context.AccessTokenSecret}"); System.Diagnostics.Debug.WriteLine($"TwitterEvents.OnCreatingTicket: User = {context.User}"); return Task.CompletedTask; } }; ... // Commented because probably you are not asking for this //twitterOptions.CallbackPath = new PathString("/signin-twitter2"); });
可以这样自定义身份验证方案:
services.AddAuthentication(options => { ... options.DefaultChallengeScheme = "abc"; }) .AddTwitter("abc", options => { ... })
您可以参考 official documentation 进一步说明。