IT |
気になる、記になる… |
「Windows 11」のサードパーティ製ウィジェット対応に関する続報 |
https://taisy0.com/2022/01/03/150352.html
|
sunvalley |
2022-01-02 23:55:12 |
Program |
[全てのタグ]の新着質問一覧|teratail(テラテイル) |
最近、いろんな企業がiCloud.comからメールを送って来ますが、どうしたんですか? |
https://teratail.com/questions/376430?rss=all
|
最近、いろんな企業がiCloudcomからメールを送って来ますが、どうしたんですかAmazon、Microsoft、楽天とか色々な企業が、自分たちの信用されたドメインがあるにも関わらずiCloudcomからメールを送って来ますが、どうしたんですか今見たらテラテイルもそうでした。 |
2022-01-03 08:44:30 |
Program |
[全てのタグ]の新着質問一覧|teratail(テラテイル) |
h1のフォントサイズが2倍になる |
https://teratail.com/questions/376429?rss=all
|
hのフォントサイズが倍になる一括してフォントサイズをpxにしようとdivタグで囲み以下のコードを書きましたが、h要素がpxになりました。 |
2022-01-03 08:43:53 |
Program |
[全てのタグ]の新着質問一覧|teratail(テラテイル) |
レンタルサーバを使って、データベースに接続したい。 |
https://teratail.com/questions/376428?rss=all
|
レンタルサーバを使って、データベースに接続したい。 |
2022-01-03 08:31:31 |
Docker |
dockerタグが付けられた新着投稿 - Qiita |
さくらのクラウドのロードバランサを使ってswarm上のコンテナへのアクセス経路の可用性を高める |
https://qiita.com/tomokitamaki/items/3cc241bf2b5439a533e3
|
sudoiptablestnatAPREROUTINGdロードバランサのVIPjREDIRECTegsudoiptablestnatAPREROUTINGdjREDIRECTロードバランサのVIPにアクセスしてみるhttpかつtraefikのルールに合致したアクセスしてバランシングされてたら出来上がりその他自分のドメインを持っていたら、さくらのクラウドのDNSアプライアンスを使って、lb自分のドメインAロードバランサのVIPみたいなAレコードをDNSアプライアンスに設定すると名前解決出来るようになって楽しくなる。 |
2022-01-03 08:47:39 |
海外TECH |
Ars Technica |
A “war of experts”: revisiting the infamous 19th century Flores Street poisonings |
https://arstechnica.com/?p=1822942
|
portugal |
2022-01-02 23:38:07 |
海外TECH |
DEV Community |
You don't need null |
https://dev.to/vangware/you-dont-need-null-3m4n
|
You don x t need nullWhile a lot of programming languages that have a nullish type null nil etc debate about avoiding it JavaScript is the only popular one that has two you read that right two nullish types One of the most common recommendations is to stick to using only one and my recommendation is to only use undefined and avoid null In this article we will go over the reasons you might also want to avoid null in JavaScript and TypeScript The nullish that the language usesAs Douglas Crockford put it in one of his talks JavaScript itself uses undefined all the time so let s use the one the language uses let something This is undefined const otherThing foo hi otherThing bar This is also undefinedconst aFunction anArgument gt anArgument here is undefined if no value is passed To use null on all those scenarios we need to explicitly set the values to null which will look like this let something null const otherThing foo hi bar null const aFunction anArgument null gt I don t know about you but for me What if I want to define a nullish value intentionally In that case just assign undefined to it const anObject otherObject propertyToNullify undefined That nasty bug with the type of nullWe all know at this point about the bug with typeof null that bug doesn t apply to undefined which works as expected typeof null object typeof undefined undefined Why would we use a bugged value intentionally Smaller API responsesAPI response sizes are reduced drastically if we rely on undefined instead of null Here s a response example using null foo foo bar null Versus with undefined foo foo The case with ArrayArray is a special case because when we create a new array of a given size the items inside said array are actually empty not undefined This empty means that if you check for their value it will give you undefined but they aren t taking any space in memory performance reasons so if you try to loop over it it will give you nothing const array new Array empty empty empty array undefined truearray map console log nothing logs The arguments in favor of nullWhen I say that you don t need null folks that use it a lot generally coming from other languages that have null as the only nullish value get pretty mad about such claims The most common response I get is null is for intentional missing values and undefined should be used when the values were never set in the first place The first thing I think with responses like that is Why would you ever need to make that distinction Both are nullish and you don t need to differentiate between intentionally missing and unintentionally missing One common usage of null is to do stuff like this const people firstName Luke middleName null lastName Shiru firstName Barack middleName Hussein lastName Obama But you can just omit middleName when the user doesn t have one const people firstName Luke lastName Shiru And the TypeScript representation would be something like this type Person firstName string middleName string lastName string Why would we spend memory with a null value there or bits with a JSON coming from the back end when we can just omit what is not there But the API is responding with null maybe written in Java so I have to use null all over my app as well My answer to that is Use an API wrapper Instead of spreading null all over your codebase update your surface of contact with the API so nulls are removed and if you have any contact with the folks making the API voice your concern of making API responses smaller by getting rid of null values You should try to avoid ending up over engineering over complicating your app just to deal with null when you can just avoid it altogether But in React I use null when I want a component to not render anythingYou can use undefined as well You have to type more characters when you write undefined explicitly in your code Generally you will rely on it implicitly omitting the value but even if we had to type it every time is worth it compared to all the downsides of null Languages without nullishThere are languages out there that don t have nullish values and instead rely on Maybe which is a type that means we might get a certain type or nothing We can do a simple implementation of that in TypeScript like this const Maybe lt Type gt Type undefined So we might get whatever type we are expecting or undefined We can just use as well when it s a property or argument const aFunction optionalArgument Type gt type AnObject optionalProperty Type To deal with our Maybes we can use operators such as nullish coalescing and optional chaining so We don t need to do something nasty like this const greet name gt Hello name null name Guest We can do this const greet name gt Hello name Guest Or better yet because we are using undefined we can actually const greet name Guest gt Hello name Linting like a champIf you re convinced that null is not a good nullish value you can avoid it from now on using this great ESLint plugin and just add this to your linting rules plugins no null rules no null no null error Closing thoughtsMy personal opinion about null in JavaScript is anything written with null can be written with undefined instead but your millage might vary so as usual I close this article with a few open questions Do you NEED to use null Don t you have a way of resolving that issue without it Thanks for reading this and special thanks to the followers that motivate me to keep doing this series Remember that if you don t agree with something said here you can just leave a comment and we can discuss it further See you in the next post of this series DISCLAIMER This series is called You don t need emphasis on need meaning that you would be fine without the thing that the post covers This series explores alternatives it doesn t impose them so consider that before glancing over the post and ranting on the comment section |
2022-01-02 23:20:06 |
海外TECH |
DEV Community |
ASP.NET Core 6: Autenticación JWT y Identity Core |
https://dev.to/isaacojeda/aspnet-core-6-autenticacion-jwt-y-identity-core-170i
|
ASP NET Core Autenticación JWT y Identity Core IntroducciónEn este artículo exploraremos a fondo las características de los JSON Web Tokens su composición y su implementación utilizando Minimal APIs y ASP NET Identity El código de ejemplo lo podrás encontrar en este repositorio en mi github Espero les sea de utilidad Autenticación JWT Bearer ¿Quées un Json Web Token Un JSON Web Token JWT es un estándar RFC que define una forma segura y compacta de transmitir información entre dos entidades en forma de un objeto JSON Esta información puede ser verificada y es confiable ya que estáfirmada digitalmente Los JWTs pueden ser firmados utilizando una llave privada con un algoritmo HMAC o con llaves públicas y privadas utilizando RSA o ECDSA ¿Cuando deberías utilizar Json Web Tokens Aquíveremos un par de escenarios donde es útil y recomendable utilizar los JWTs Autorización Este es el caso de uso más común de los JWTs Una vez que un usuario ha iniciado sesión cada llamada subsecuente al servicio incluiráel JWT permitiendo al usuario acceder a rutas servicios o recursos que solo están permitidos con su debido token SSO Single Sign On es una funcionalidad que hoy en día usa los JWTs ampliamente por que son de tamaño reducido y por su habilidad de ser usado entre diferentes dominios Intercambio de Información Los JWTs son útiles también para transmitir información entre dos entidades Debido a que los JWTs pueden estar firmados ーpor ejemplo utilizando una llave pública privada ーpodemos estar seguros que quien manda la información es verdaderamente él quien lo manda Adicionalmente la firma es calculada utilizando el encabezado del JWT y el contenido payload por lo que también estamos seguros que el contenido del JWT no fue alterado ¿Quéestructura tiene un JWT Un JWT estáseparado por puntos en tres partes las cuales son Encabezado header Contenido payload Firma signature Un JWT comúnmente tiene la siguiente forma xxxxx yyyyy zzzzzVeamos que significa cada una de estas partes HeaderEl encabezado típicamente consiste de dos partes el tipo de token que seráJWT y el algoritmo que se estáusando en la firma que puede ser HMAC SHA o RSA Por ejemplo alg HS typ JWT Después este JSON se codifica en BaseURL para formar parte del primer segmento del JWT PayloadLa segunda parte del JWT es el contenido que se transmite o certifica payload el cual contiene la serie de claims Claims son afirmaciones sobre una entidad usualmente el usuario e información adicional Hay tres tipos de claims registrados públicos y privados Claims registrados Son un conjunto de claims predefinidos que no son obligatorios pero sírecomendados para proveer un conjunto de claims interoperables Algunos de ellos son iss issuer exp tiempo de expiración sub subject aud audience entre otros Nótese que los nombres de los claims son de tres letras por la misma intención de mantener el JWT de tamaño reducido Claims públicos Estos pueden ser definidos como cada quien desee pero para evitar colisiones de nombres y mantener un estándar ya que puede usarse en distintos servicios se utiliza la siguiente lista llamada IANA JSON Web Token Registry Claims privados Estos claims son personalizados por cada quien que implemente los JWTs y al igual que los públicos para evitar colisiones es recomendable utilizar un formato URL con algún namespace y asíasegurar que son únicosPor ejemplo un claim que guarda los roles de ASP NET Core tendría el siguiente nombre Un ejemplo de un payload sería el siguiente sub name John Doe admin true Y al igual que el header este segmento se codifica en BaseUrl Nota Aunque los JWT estén firmados solo están protegidos para evitar falsificaciones editar el payload pero de igual forma toda la información en el payload es visible para cualquiera NO INCLUYAS información sensible en el payload al menos que estéencriptada SignaturePara crear la firma debemos de tomar el header codificado el payload codificado una llave secreta el algoritmo especificado en el header y firmar todo eso Por ejemplo si vamos a utilizar el algoritmo de encripción HMAC SHA la firma serácreada de la siguiente forma HMACSHA baseUrlEncode header baseUrlEncode payload secret La firma se usarápara verificar que el mensaje no ha cambiado mientras viaja por la red y en caso de ser tokens firmados por una llave privada de un certificado también se puede verificar el emisor Juntando todoAl final tendremos tres cadenas de texto codificadas en Base URL separadas por puntos y se podrán incluir en solicitudes HTTP o contenido HTML sin ningún problema Esto es una forma mucho más compacta comparado a otros estándares como SAML que utiliza XML Al final tendríamos un JWT de la siguiente forma Si quieres jugar y generar tus propios JWT de prueba puedes visitar jwt io ¿Cómo funcionan los JWT Cuando un usuario ha sido autenticado el servicio deberáregresar un JSON Web Token para ser usado como sus credenciales Dado que esto es usado para autorizar el usuario debes de considerar cuidar muy bien donde guardas el token y eliminarlo lo más pronto posible si ya no se requiere Cuando un usuario quiere acceder a contenido restringido en una ruta protegida se debe de incluir el token en el HTTP Header Authorization y utilizando el esquema Bearer Ejemplo Authorization Bearer lt token gt Generalmente en Web APIs y como lo haremos más adelante que son aplicaciones stateless siempre requeriráque el token vaya incluido en el encabezado Authorization El servicio verificarálo necesario para determinar si es un token válido o no y si este es válido leerásu información los claims y lo usaráen la solicitud de ser necesario Esto también reduce las consultas a bases de datos para leer información del usuario ya que el token puede contener información común para poder operar como username email roles etc Dado que el token va incluido en el header no habráproblemas con el Cross Origin Resource Sharing CORS ya que no se utilizan cookies las cookies son por dominio El siguiente diagrama muestra como se podría utilizar una autorización y autenticación por medio de JWT La aplicación cliente solicita autorización al Identity Server como Auth o Azure AD BC Esto se puede hacer por medio de distintos flujos de autorización definidos en el estándar OpenID Connect pero no estamos obligados a seguirlos De igual forma si seguimos OpenID típicamente se utilizaría el endpoint oauth authorize utilizando el flujo de code flow Cuando se autoriza el acceso el servidor de autorización regresa el access token a la aplicación clienteLa aplicación cliente usa el access token para acceder a recursos protegidos como una API ¿Y el código Probemos con ASP NET y Minimal APIsEn este ejemplo utilizaremos herramientas production ready y trataréde mantenerlo simple sin embargo cada quien podrádecidir como estructurarlo e implementarlo Anteriormente mencionamos el estándar OpenId que especifica como realizar estos flujos de autenticación pero para fines prácticos y didácticos realizaremos nuestro propio servidor de autorización seráel mismo que la API protegida pero es muy recomendable delegar este proceso a servicios como Auth o frameworks como IdentityServer certificados para una mayor seguridad y compliance En este proyecto utilizaremos Entity Framework Core con SQLite para persistencia para fines del ejemplo en producción deberías de usar un servicio como SQL Azure o similares ASP NET Identity para el manejo de credenciales Minimal APIs por su sencilles pero podrán usar Controllers Carter ApiEndpoints o cualquier endpoint que deseen Para comenzar crearemos un proyecto Web vacío dotnet new web o WebApiJwtY necesitamos los siguientes paquetes registrados en el WebApiJwt csproj lt ItemGroup gt lt PackageReference Include Microsoft AspNetCore Authentication JwtBearer Version gt lt PackageReference Include Microsoft AspNetCore Identity Version gt lt PackageReference Include Microsoft AspNetCore Identity EntityFrameworkCore Version gt lt PackageReference Include Microsoft EntityFrameworkCore Version gt lt PackageReference Include Microsoft EntityFrameworkCore Sqlite Version gt lt PackageReference Include Microsoft EntityFrameworkCore Tools Version gt lt IncludeAssets gt runtime build native contentfiles analyzers buildtransitive lt IncludeAssets gt lt PrivateAssets gt all lt PrivateAssets gt lt PackageReference gt lt ItemGroup gt PersistenciaCrearemos una carpeta llamada “Persistence y aquípondremos las migraciones y el DbContext con tablas preestablecidas por Identity using Microsoft AspNetCore Identity EntityFrameworkCore using Microsoft EntityFrameworkCore using WebApiJwt Entities namespace WebApiJwt Persistence public class MyDbContext IdentityDbContext lt User gt public MyDbContext DbContextOptions lt MyDbContext gt options base options Para lo cual necesitaremos nuestra definición custom de la clase Usuario using Microsoft AspNetCore Identity namespace WebApiJwt Entities public class User IdentityUser public string FirstName get set default public string LastName get set default Aquíestamos usando un DbContext con tablas preestablecidas y IdentityUser es parte de ellas solo lo estamos extendiendo para agregar campos personalizados nombre y apellidos Configuración de Identity y JWTPara configurar Identity y EntityFramework registramos las siguientes dependencias en nuestro archivo Program cs using Microsoft AspNetCore Authentication JwtBearer using Microsoft AspNetCore Identity using Microsoft AspNetCore Mvc using Microsoft IdentityModel Tokens using System IdentityModel Tokens Jwt using System Security Claims using System Text using WebApiJwt Entities using WebApiJwt Models using WebApiJwt Persistence var builder WebApplication CreateBuilder args builder Services AddSqlite lt MyDbContext gt builder Configuration GetConnectionString Default AddIdentityCore lt User gt AddRoles lt IdentityRole gt AddEntityFrameworkStores lt MyDbContext gt AddSqlite Registra el DbContext es un atajo del método habitual AddDbContextAddIdentityCore Registra las dependencias que necesita Identity como generador de contraseñas manejo de usuarios etcAddRoles Registra todo lo necesario para poder usar roles en este caso con la implementación default de la clase IdentityRole AddEntityFrameworkStores Vincula nuestro contexto de EntityFramework con todas sus dependencias que Identity necesita respecto a persistenciaDespués de esto agregamos la configuración que necesitamos para poder autenticar por medio de JWTs builder Services AddHttpContextAccessor AddAuthorization AddAuthentication JwtBearerDefaults AuthenticationScheme AddJwtBearer options gt options TokenValidationParameters new TokenValidationParameters ValidateIssuer true ValidateAudience true ValidateLifetime true ValidateIssuerSigningKey true ValidIssuer builder Configuration Jwt Issuer ValidAudience builder Configuration Jwt Audience IssuerSigningKey new SymmetricSecurityKey Encoding UTF GetBytes builder Configuration Jwt Key AddHttpContextAccessor Registra el IHttpContextAccessor que nos permite acceder el HttpContextde cada solicitud la usaremos más adelante para acceder al usuario actual autenticado AddAutorization Dependencias necesarias para autorizar solicitudes como autorización por roles AddAuthentication Agrega el esquema de autenticación que queramos usar en este caso queremos usar por default la autenticación por Bearer TokensAddJwtBearer Configura la autenticación por tokens especificando que debe de validar y que llave privada utilizarPor supuesto esta configuración la va a leer del appsettings jsonQuedando el archivo de configuración de la siguiente manera ConnectionStrings Default Data Source Identity db Jwt Issuer WebApiJwt com Audience localhost Key Scrt Ky Scrt Ky Logging LogLevel Default Information Microsoft AspNetCore Warning AllowedHosts En este punto deberíamos de poder crear las migraciones de la base de datos en este caso SQLite y actualizar el esquema con todo lo predefinido por Identity dotnet ef migrations add FirstMigration o Persistence MigrationsY contaríamos con algo similar a lo siguiente Para finalizar la configuración y antes de implementar la autenticación debemos de usar dos middlewares que nos ayudarán a decodificar automáticamente el JWT y agregarlo en caso de ser válido a la solicitud HTTP var app builder Build app UseAuthentication app UseAuthorization app MapGet gt Hello World app Run EndpointsImplementaremos dos endpoints uno para autenticación y uno para simular un acceso restringido Authorization endpoint token app MapPost token async AuthenticateRequest request UserManager lt User gt userManager gt Verificamos credenciales con Identity var user await userManager FindByNameAsync request UserName if user is null await userManager CheckPasswordAsync user request Password return Results Forbid var roles await userManager GetRolesAsync user Generamos un token según los claims var claims new List lt Claim gt new Claim ClaimTypes Sid user Id new Claim ClaimTypes Name user UserName new Claim ClaimTypes GivenName user FirstName user LastName foreach var role in roles claims Add new Claim ClaimTypes Role role var securityKey new SymmetricSecurityKey Encoding UTF GetBytes builder Configuration Jwt Key var credentials new SigningCredentials securityKey SecurityAlgorithms HmacShaSignature var tokenDescriptor new JwtSecurityToken issuer builder Configuration Jwt Issuer audience builder Configuration Jwt Audience claims claims expires DateTime Now AddMinutes signingCredentials credentials var jwt new JwtSecurityTokenHandler WriteToken tokenDescriptor return Results Ok new AccessToken jwt El código de arriba se divide en dos partes Verificación de credenciales Utilizamos Identity de ASP NET para guardar usuarios tiene más funcionalidad pero por ahora solo usaremos esta parte y roles UserManager cuenta ya con muchos métodos para manejar usuarios sus contraseñas y sus roles Generación del JWT Según el listado de claims que se generaron según el usuario autenticado generamos el JWT Esto es un boilerplate siempre seráel mismo código Lo importante es ver que estamos utilizando la configuración del appsettings los mismos que se utilizarán para verificar el JWT al hacer solicitudes Por parámetro se recibe el usuario y contraseña este es el siguiente record namespace WebApiJwt Models public record AuthenticateRequest string UserName string Password Protected endpoint me Este endpoint lo único que haráes regresar la información del usuario claims según el JWT que se mandó app MapGet me IHttpContextAccessor contextAccessor gt var user contextAccessor HttpContext User return Results Ok new Claims user Claims Select s gt new s Type s Value ToList user Identity Name user Identity IsAuthenticated user Identity AuthenticationType RequireAuthorization Utilizamos IHttpContextAccessor para acceder al usuario decodificado automáticamente por el middleware y simplemente regresamos esa información como prueba Usamos la extensión RequireAuthorization para indicar al endpoint que se necesita un esquema de autorización y como no se específica lo contrario utilizaráel esquema default que es Bearer Tokens Probando la soluciónPara poder probar esto necesitamos usuarios de prueba para eso crearemos un método SeedData dentro del Program csasync Task SeedData var scopeFactory app Services GetRequiredService lt IServiceScopeFactory gt using var scope scopeFactory CreateScope var context scope ServiceProvider GetRequiredService lt MyDbContext gt var userManager scope ServiceProvider GetRequiredService lt UserManager lt User gt gt var roleManager scope ServiceProvider GetRequiredService lt RoleManager lt IdentityRole gt gt var logger scope ServiceProvider GetRequiredService lt ILogger lt Program gt gt context Database EnsureCreated if userManager Users Any logger LogInformation Creando usuario de prueba var newUser new User Email test demo com FirstName Test LastName User UserName test demo await userManager CreateAsync newUser P ss Wrd await roleManager CreateAsync new IdentityRole Name Admin await roleManager CreateAsync new IdentityRole Name AnotherRole await userManager AddToRoleAsync newUser Admin await userManager AddToRoleAsync newUser AnotherRole Aquísimplemente nos aseguramos que la base de datos exista y si previamente no hay usuarios se crearán los roles y un usuario de prueba utilizando las clases de Identity Los roles se pueden utilizar para autorizar endpoints según el rol del usuario En este ejemplo solo muestro como incluirlos en el JWT pero asp net lo entenderásin problema Más códigovar app builder Build await SeedData app UseAuthentication app UseAuthorization Más código Corremos la aplicación y hacemos nuestras primeras pruebas utilizando HTTP Rest de VS Code o puedes usar Postman o cualquier cliente http que gustes Solicitud POST host tokenContent Type application json userName test demo password P ss Wrd Respuesta HTTP OKConnection closeContent Type application json charset utf Date Sun Jan GMTServer KestrelTransfer Encoding chunked accessToken eyJhbGciOiJodHRwOivddLnczLmyZyyMDAxLzALhtbGRzaWctbWyZSNobWFjLXNoYTINiIsInRcCIIkpXVCJ eyJodHRwOivcNoZWhcybWxzbFwLmyZycyyMDALzALlkZWaXRLNsYWltcyzaWQiOiJhMWNhODMxZCiMTIzLTQZDgtYjViOCiNjNlYWZiYzZlNDciLCJodHRwOivcNoZWhcybWxzbFwLmyZycyyMDALzALlkZWaXRLNsYWltcyuYWlIjoidGVzdCkZWvIiwiaHRcDovLNjaGVtYXMueGschcCvcmcvdMvMjAwNSwNSpZGVudGleSjbGFpbXMvZlZWuYWlIjoiVGVzdCBVcVyIiwiaHRcDovLNjaGVtYXMubWljcmzbZLmNvbScyyMDALzALlkZWaXRLNsYWltcyybxlIjpbIkFubRoZXJSbxlIiwiQWRtaWiXSwiZXhwIjoxNjQxMjAOTUwLCJpcMiOiJXZWJBcGlKdQuYtIiwiYXVkIjoibGjYWxobNIn CtTkOJVmFlASRvvOuZhCrOHUy AiMfNUzQbYByc Puedes hacer pruebas con usuarios o contraseñas incorrectas Para verificar el endpoint protegido llamamos el endpoint me GET host meContent Type application jsonAuthorization Bearer jwt Respuesta HTTP OKConnection closeContent Type application json charset utf Date Sun Jan GMTServer KestrelTransfer Encoding chunked claims type value acad b d bb beafbce type value test demo type value Test User type value AnotherRole type value Admin type exp value type iss value WebApiJwt com type aud value localhost name test demo isAuthenticated true authenticationType AuthenticationTypes Federation Puedes hacer pruebas modificando el token manualmente desde JWT io o modificando cualquier dato y explora como se comporta ConclusiónLos JSON Web Tokens se han convertido en el esquema default de autenticación de las aplicaciones modernas Saber como se forman y como implementarlas es un must have al diseñar una aplicación web hoy en día El uso de asp net Identity es la forma recomendada de emplear este mecanismo o cualquier mecanismo de autenticación ya que el manejo de seguridad y contraseñas a nivel código ya no sería de nuestra preocupación y utilizamos un framework enterprise ready en lugar de reinventar la rueda ReferenciasJSON Web Token Introduction jwt ioImplementing JWT Authentication in ASP NET Core codemag com |
2022-01-02 23:09:08 |
Apple |
AppleInsider - Frontpage News |
The best iPhone widget apps for customizing your iPhone home screen |
https://appleinsider.com/articles/22/01/02/the-best-iphone-widget-apps-for-customizing-your-iphone-home-screen?utm_medium=rss
|
The best iPhone widget apps for customizing your iPhone home screenMake your iPhone home screen as individual as you are by taking advantage of widget support in iOS Here are some of the best widget apps you can get for your iPhone An iPhone has built in widgets but you could add more With the introduction of iOS and continuing into iOS Apple introduced home screen widgets These add ons provided immediate data and access to apps and features without needing to open up a specific app beforehand Read more |
2022-01-02 23:15:23 |
金融 |
ニュース - 保険市場TIMES |
日本少額短期保険協会、第8回おもしろミニ保険大賞コンテスト 開催中! |
https://www.hokende.com/news/blog/entry/2022/01/03/090000
|
日本少額短期保険協会、第回おもしろミニ保険大賞コンテスト開催中実際に商品化された保険も日本少額短期保険協会では、新しい保険のアイデアを募る「おもしろミニ保険コンテスト」を年月日水まで開催している。 |
2022-01-03 09:00:00 |
ニュース |
BBC News - Home |
Emily in Paris: Ukraine complains over Kiev character stereotype |
https://www.bbc.co.uk/news/world-europe-59855440?at_medium=RSS&at_campaign=KARANGA
|
character |
2022-01-02 23:08:33 |
ニュース |
BBC News - Home |
The Papers: 'Backlash' at masks in schools and NHS staffing 'crisis' |
https://www.bbc.co.uk/news/blogs-the-papers-59855294?at_medium=RSS&at_campaign=KARANGA
|
backlash |
2022-01-02 23:25:57 |
ニュース |
BBC News - Home |
Brown 'no longer a Buc' after walking off in middle of NFL game |
https://www.bbc.co.uk/sport/american-football/59855335?at_medium=RSS&at_campaign=KARANGA
|
Brown x no longer a Buc x after walking off in middle of NFL gameWide receiver Antonio Brown is no longer with the Tampa Bay Buccaneers after dramatically walking out of their game at the New York Jets |
2022-01-02 23:10:04 |
サブカルネタ |
ラーブロ |
麺屋 悟空@八王子市<悟空ラーメン> |
http://ra-blog.net/modules/rssc/single_feed.php?fid=195206
|
八王子市 |
2022-01-02 23:30:38 |
北海道 |
北海道新聞 |
レガネスの柴崎は後半途中まで スペイン2部リーグ |
https://www.hokkaido-np.co.jp/article/629631/
|
後半途中 |
2022-01-03 08:13:00 |
海外TECH |
reddit |
今年の目標毎週最低10km走る、始めた |
https://www.reddit.com/r/lowlevelaware/comments/rum7ha/今年の目標毎週最低10km走る始めた/
|
wlevelawarelinkcomments |
2022-01-02 23:09:41 |
コメント
コメントを投稿