小编Qer*_*rts的帖子

如何模拟/创建 X509Certificate2 进行单元测试?

我有使用 X509Certificate2 创建 jwt 令牌的处理程序。对于单元测试,我需要提供证书,而我无法从本地商店获取证书。有没有办法,如何从文件中模拟、创建或加载证书?

到目前为止,我从这张票中尝试了 BouncingCastle 方法,但没有成功。ToX509Certificate2() 方法确实转换证书,但没有密钥。因此,如果这是好的方法,是否可以以某种方式生成这些密钥?

非常感谢提示

.net c# unit-testing x509

9
推荐指数
1
解决办法
1万
查看次数

多个MessageDialog应用程序崩溃

MessageDialogues在我的应用程序的几个地方使用.问题是,只要有任何MessageDialog(或系统警报,如功能警告)处于活动状态而另一个人MessageDialog被调用,应用程序就会毫无例外地崩溃或者崩溃UnathorizedAccessException.

这就是我如何调用MessageDialog:

CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
{
    MessageDialog msg2 = new MessageDialog(_resourceLoader.GetString("MsgGPSUnavailable"));
    msg2.ShowAsync();
});
Run Code Online (Sandbox Code Playgroud)

我以为我应该等待对话框的关闭,但是通过使用Dispatcher我将这个对话框排队到主UI线程,它自己处理这个?感谢您对此问题的任何解释.

编辑 - 我一步一步地进行了下面的代码,它包含在同一个类中.当我运行app时,会调用LoadDataToModel.这没关系,msgGPSDisabled显示了对话框.之后引发事件并调用locator_StatusChanged.这也没问题,并显示对话框.现在奇怪的部分.当我不在LoadDataToModel中调用msgGPSDisabled且仅在locator_StatusChanged中调用msgGPSDisabled时,app会在显示对话框后立即崩溃.没有例外,第47行打开了App.gics(DEBUG &&!DISABLE_XAML_GENERATED_BREAK_ON_UNHANDLED_EXCEPTION).即使我使用try-catch,也可以使用它.当我在locator_StatusChanged中使用不带Dispatcher的msgGPSDisabled时,会引发异常.不可捕获,"找不到物品"

public async Task LoadDataToModel()
{
    await msgGPSDisabled();

    this.IsBusy = true;

    await LoadDataGarvis(Stations); //rozparsuje raw data a na?te je do modelu
    InitializePins();

    this.IsBusy = false;


    }

void locator_StatusChanged(Geolocator sender, StatusChangedEventArgs args)
{
    switch (sender.LocationStatus)
    {
        case Windows.Devices.Geolocation.PositionStatus.Disabled:

            try
            {
                CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, async () =>
                {
                    await msgGPSDisabled();
                    IsGPSBusy = false;
                    IsGPS = false;

                }); …
Run Code Online (Sandbox Code Playgroud)

c# windows-runtime

4
推荐指数
1
解决办法
1190
查看次数

ItemsSource绑定不更新值

我需要列出项目.我将用户集合绑定到列表框.一切都很好,但列表框中的项目不会实时更新.它们根本没有更新.因此,当我从列表中删除任何用户时,即使其源已正确更改,列表框也不会更新.

Source位于路径DataViewModel.Instance.AllUsers的数据视图模型中; 每当我向此列表添加新项目或删除一项时,布局都不会更新.其他绑定工作得很好.我试图更新列表框布局,提出源更新事件,添加/删除项目的其他方式,但没有任何工作.

我试图调试绑定,但我有太多的绑定来找到错误.

提前感谢任何有用的建议.

列表框:

<ListBox x:Name="ListboxUsers" ItemsSource="{Binding Path=AllUsers, Mode=OneWay}" Grid.Column="1" Margin="0" Grid.Row="5" Background="DimGray" BorderThickness="0" Visibility="Hidden" SelectionChanged="ListboxUsers_SelectionChanged"/>
Run Code Online (Sandbox Code Playgroud)

代码隐藏:

CatalogueGrid.DataContext = DataViewModel.Instance;    //whole view model added as datacontext
Run Code Online (Sandbox Code Playgroud)

DataViewModel类:

public class DataViewModel : INotifyPropertyChanged
{
    private static DataViewModel _dataViewModel;

    private Collection<UserModel> allUsers;
    public Collection<UserModel> AllUsers
    {
        get
        {
            return allUsers;
        }
        set
        {
            allUsers = value;
            NotifyPropertyChanged("AllUsers");
        }
    }


    private DataViewModel()
    {
        AllUsers = new Collection<UserModel>();
    }    

    public event PropertyChangedEventHandler PropertyChanged;
    private void NotifyPropertyChanged(string info)
    {
        PropertyChangedEventHandler handler = PropertyChanged; …
Run Code Online (Sandbox Code Playgroud)

c# wpf xaml

2
推荐指数
2
解决办法
4445
查看次数

JwtToken-索赔名称JwtTokenTypes.Subject解析为ClaimTypes.NameIdentifier,这是为什么,如何防止?

我有这样创建的JwtToken:

        X509Certificate2 cert = certificateStore.Certificate;

        var now = DateTime.UtcNow;
        var tokenHandler = new JwtSecurityTokenHandler();
        var tokenDescriptor = new SecurityTokenDescriptor()
        {
            Subject = new ClaimsIdentity(new[]
            {
                    new Claim(JwtClaimTypes.Subject, upn),
                    new Claim(REQUEST_TYPE_NAME, requestType),
                    new Claim(DOMAIN_NAME, domain),
                }),
            Lifetime = new Lifetime(now, now.AddMinutes(60)),
            SigningCredentials = new X509SigningCredentials(cert),
            TokenIssuerName = ISSUER
        };

        SecurityToken token = tokenHandler.CreateToken(tokenDescriptor);
Run Code Online (Sandbox Code Playgroud)

这是对的。创建令牌,并将其第一个声明命名为“ sub”,它是JwtTokenTypes.Subject的内容。我通过jwt web进行了检查。

问题是,我有这种解决索赔的方法:

        if (string.IsNullOrWhiteSpace(token)) throw new MissingTokenException("Token should not be null.");

        var tokenHandler = new JwtSecurityTokenHandler();
        var securityToken = new X509SecurityToken(new X509Certificate2(new X509RawDataKeyIdentifierClause(certificateStore.Certificate).GetX509RawData()));
        var …
Run Code Online (Sandbox Code Playgroud)

.net c# jwt

2
推荐指数
1
解决办法
2488
查看次数

标签 统计

c# ×4

.net ×2

jwt ×1

unit-testing ×1

windows-runtime ×1

wpf ×1

x509 ×1

xaml ×1